实验三 类与对象2

实验任务4

vector_int.hpp

#include<iostream>
#include<cassert>
using namespace std;

class Vector_int{
public:
    Vector_int(int Size,int Value = 0);
    Vector_int(const Vector_int &x);
    ~Vector_int();
    int &at(int n);
    void show();

private:
    int size,value;
    int *p;
};

Vector_int::Vector_int(int Size,int Value):size{Size},value{Value}{
        p = new int [size];
        for(int i = 0;i < size;i++)
            p[i] = Value;
        cout << "构造函数调用" << endl;
    } 

Vector_int::Vector_int(const Vector_int &x):size{x.size}{
        p = new int [size];
        for(auto i = 0;i < size;i++)
            p[i] = x.p[i];
        cout << "复制构造函数调用" << endl;
    }

Vector_int::~Vector_int(){
        delete [] p;
        cout << "析构函数调用" << endl;
    }

int &Vector_int::at(int n){
        assert(n>=0 && n<size);
        return p[n];
    }

void Vector_int::show(){
        for(int i = 0;i < size;i++)
            cout << p[i] <<",";
        cout << endl;
    }

task4.cpp

#include<bits/stdc++.h>
#include"vector_int.hpp"
using namespace std;

int main()
{
    Vector_int v1(11);
    Vector_int v2(22,6);

    v1.at(4) = 44;
    cout << v2.at(6) << endl;
    Vector_int v3(v1);

    v3.at(4) = 55;

    cout << "v1:" << endl;
    v1.show();
    cout << "v2:" << endl;
    v2.show();
    cout << "v3:" << endl;
    v3.show();
    return 0;
}

实验任务5

Matrix.hpp

#include <iostream>
#include <cassert>
using namespace std;

class Matrix
{
public:
    Matrix(int n);                     // 构造函数,构造一个n*n的矩阵
    Matrix(int n, int m);              // 构造函数,构造一个n*m的矩阵
    Matrix(const Matrix &X);           // 复制构造函数,使用已有的矩阵X构造
    ~Matrix();                         //析构函数
    void set(const double *pvalue);     // 用pvalue指向的连续内存块数据为矩阵赋值
    void set(int i, int j, int value); //设置矩阵第i行第j列元素值为value
    double &at(int i, int j);          //返回矩阵第i行第j列元素的引用
    double at(int i, int j) const;     // 返回矩阵第i行第j列元素的值
    int get_lines() const;             //返回矩阵行数
    int get_cols() const;              //返回矩列数
    void print() const;                // 按行打印输出矩阵
private:
    int lines; // 矩阵行数
    int cols;  // 矩阵列数
    double *p; // 指向存放矩阵数据的内存块的首地址
};

Matrix::Matrix(int n):lines{n},cols{n}{
    p = new double[lines * cols];
}

Matrix::Matrix(int n,int m):lines{n},cols{m}{
    p = new double[lines * cols];
}
Matrix::Matrix(const Matrix &X):lines{X.lines},cols{X.cols}{
    p = new double[lines * cols];
    for(int i = 0;i < lines*cols;i++)
        p[i] = X.p[i];
}

Matrix::~Matrix(){
    delete[] p;
}

void Matrix::set(const double *pvalue){
    for(int i = 0;i < lines*cols;i++)
        p[i] = pvalue[i];
}     // 用pvalue指向的连续内存块数据为矩阵赋值
void Matrix::set(int i, int j, int value){
    p[i*cols+j] = value;
} //设置矩阵第i行第j列元素值为value
double &Matrix::at(int i, int j){
    return p[i*cols+j];
}          //返回矩阵第i行第j列元素的引用
double Matrix::at(int i, int j) const{
    return p[i*cols+j];
}     // 返回矩阵第i行第j列元素的值
int Matrix::get_lines() const{
    return lines;
}           //返回矩阵行数
int Matrix::get_cols() const{
    return cols;
}             //返回矩列数
void Matrix::print() const{
    for(int i = 0;i < lines;i++){
        for(int j = 0;j < cols;j++)
            cout << p[i*cols+j] << " ";
        cout << endl;
    }
}

 

 task5.cpp

#include <iostream>
#include "Matrix.hpp"
using namespace std;

int main()
{

    double x[] = {11, 22, 33, 44, 55, 66};

    Matrix m1(3, 2);    // 创建一个3×2的矩阵
    m1.set(x);          // 用一维数组x的值按行为矩阵m1赋值
    m1.print();         // 打印矩阵m1的值
    cout << "the first line is: " << endl;
    cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl;
    cout << endl;

    Matrix m2(2, 3);
    m2.set(x);
    m2.print();
    cout << "the first line is: " << endl;
    cout << m2.at(0, 0) << " " << m2.at(0, 1) << " " << m2.at(0, 2) << endl;
    cout << endl;

    Matrix m3(m2);
    m3.set(0, 0, 999);
    m3.print();

    return 0;
}

 

 
posted @ 2021-11-07 19:11  Re-cursion  阅读(42)  评论(4)    收藏  举报