//Vector_int.hpp #ifndef VECTOR_INT_H #define VECTOR_INT_H #include<iostream> #include<cassert> using std::cout; using std::endl; class Vector_int { private: int size; int* p; public: Vector_int(int n); Vector_int(int n, int value); Vector_int(const Vector_int& x); ~Vector_int(); int& at(int index); void show(); }; Vector_int::Vector_int(int n) :size(n) { cout << "调用构造函数" << endl; p = new int[n](); } Vector_int::Vector_int(int n, int value) : size(n) { cout << "调用构造函数" << endl; p = new int[n]; for (auto i = 0; i < size; ++i) p[i] = value; } Vector_int::Vector_int(const Vector_int& x):size(x.size) { cout << "调用复制构造函数" << endl; p = new int[size]; for (auto i = 0; i < size; ++i) p[i] = x.p[i]; } Vector_int::~Vector_int() { cout << "调用析构函数" << endl; delete[]p; } int& Vector_int::at(int index) { assert(index <= 0 && index < size); return p[index]; } void Vector_int::show() { for (auto i = 0; i < size; ++i) cout << p[i] << ","; cout << "\b\b\n"; } #endif
//task4.cpp #include<iostream> #include"Vector_int.hpp" using namespace std; int main() { int n; cin >> n; Vector_int x(n); x.show(); Vector_int x1(n, 6); x1.show(); Vector_int y(x); y.show(); y.at(0) = 999; y.show(); }
//Matrox.hpp #ifndef MATRIX_H #define MATRIX_H #include<iostream> class Matrix { private: int lines;//矩阵行数 int cols;//矩阵列数 double* p;//指向存放矩阵数据的内存块的首地址 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;//按行打印输出矩阵 }; Matrix::Matrix(int n) :lines(n), cols(n) { p = new double[n * n]; } Matrix::Matrix(int n, int m) : lines(n), cols(m) { p = new double[n * m]; } Matrix::Matrix(const Matrix& x) : lines(x.lines), cols(x.cols) { p = new double[lines * cols]; for (auto i = 0; i < lines * cols; ++i) p[i] = x.p[i]; } Matrix::~Matrix() { delete[]p; } void Matrix::set(const double* pvalue) { for (auto i = 0; i < lines * cols; ++i) p[i] = pvalue[i]; } void Matrix::set(int i, int j, int value) { p[i * cols + j] = value; } double& Matrix::at(int i, int j) { return p[i * cols + j]; } double Matrix::at(int i, int j)const { return p[i * cols + 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) { std::cout << p[i * cols + j] << ","; } std::cout << "\b\b\n"; } } #endif
//task5.cpp #include<iostream> #include"Matrix.hpp" int main() { using namespace std; double x[] = { 1,2,3,4,5,6 }; Matrix m1(3, 2);//创建一个3*2的矩阵 m1.set(x);//用一维数组x的值按行为矩阵m1赋值 m1.print(); cout << "the first line is:" << endl; cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl;//输出矩阵m1第一行两个元素的值 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);//用矩阵m2构造新的矩阵m3 m3.set(0, 0, 999);//将矩阵m3第0行第0列元素的值设为999 m3.print(); }