实验四
实验四
vectorInt.hpp
1 #pragma once 2 3 #include<iostream> 4 5 using namespace std; 6 7 class vectorInt { 8 public: 9 vectorInt(int a); 10 vectorInt(int a, int value); 11 vectorInt(const vectorInt& vp); 12 ~vectorInt(); 13 14 //其他成员函数 15 int &at(int i); 16 int get_size(); 17 //友元函数 18 friend void output(vectorInt t); 19 private: 20 int n; 21 int* p; 22 }; 23 24 vectorInt::vectorInt(int a) :n{ a } 25 { 26 p = new int[n](); //分配动态内存 27 cout << "constructor1 called" << endl; 28 } 29 30 vectorInt::vectorInt(int a, int value) :n{ a } 31 { 32 p = new int[n]; 33 for (int i = 0; i < n; i++) 34 { 35 p[i] = value; 36 } 37 cout << "constructor2 called" << endl; 38 } 39 40 vectorInt::vectorInt(const vectorInt &vp):n{vp.n} 41 { 42 p = new int[n]; 43 for (int i = 0; i < n; i++) 44 { 45 p[i] = vp.p[i]; //深复制 46 } 47 cout << "copy constructor called" << endl; 48 } 49 vectorInt::~vectorInt() { 50 delete[] p; 51 cout << "destructor called" << endl; 52 } 53 54 int& vectorInt::at(int i) { 55 return p[i]; 56 } 57 58 int vectorInt::get_size() { 59 return n; 60 } 61 void output(vectorInt t) { 62 for (int i = 0; i < t.n; i++) 63 cout << t.p[i]<<","; 64 cout << endl; 65 }
task_5.cpp
1 #include <iostream> 2 #include "vectorInt.hpp" 3 4 void test() { 5 using namespace std; 6 7 int n; 8 cin >> n; 9 10 vectorInt x1(n); 11 for (auto i = 0; i < n; ++i) 12 x1.at(i) = i * i; 13 14 output(x1); 15 16 vectorInt x2(n, 42); 17 vectorInt x3(x2); 18 19 output(x2); 20 output(x3); 21 22 x2.at(0) = 77; 23 24 output(x2); 25 output(x3); 26 } 27 28 int main() { 29 test(); 30 }
截图

task_6
Matrix.hpp
1 #pragma once 2 3 #include <iostream> 4 5 6 using std::cout; 7 using std::endl; 8 9 class Matrix { 10 public: 11 Matrix(int n); // 构造函数,构造一个n*n的矩阵 12 Matrix(int n, int m); // 构造函数,构造一个n*m的矩阵 13 Matrix(const Matrix& X); // 复制构造函数,使用已有的矩阵X构造 14 ~Matrix(); //析构函数 15 16 void set(const double* pvalue); // 用pvalue指向的连续内存块数据按行为矩阵赋值 17 void set(int i, int j, int value); //设置矩阵第i行第j列元素值为value 18 double& at(int i, int j); //返回矩阵第i行第j列元素的引用 19 double at(int i, int j) const; // 返回矩阵第i行第j列元素的值 20 int get_lines() const; //返回矩阵行数 21 int get_cols() const; //返回矩列数 22 void print() const; // 按行打印输出矩阵 23 24 private: 25 int lines; // 矩阵行数 26 int cols; // 矩阵列数 27 double* p; // 指向存放矩阵数据的内存块的首地址 28 }; 29 30 // 类Matrix的实现:待补足 31 // ××× 32 Matrix::Matrix(int n) :lines{ n }, cols{n} 33 { 34 p = new double[n * n]; 35 } 36 37 Matrix::Matrix(int n, int m) :lines{ n }, cols{ m } 38 { 39 p = new double[n * m]; 40 } 41 42 Matrix::Matrix(const Matrix& X) :lines{ X.lines }, cols{ X.cols } 43 { 44 p = new double[lines * cols]; 45 } 46 47 Matrix::~Matrix() 48 { 49 delete[]p; 50 } 51 52 void Matrix::set(const double* pvalue) 53 { 54 for (int i = 0; i < (lines * cols); i++) 55 { 56 p[i] = pvalue[i]; 57 } 58 } 59 60 void Matrix::set(int i, int j, int value) 61 { 62 int n = i * cols + j; 63 p[n] = value; 64 } 65 66 double& Matrix::at(int i, int j) 67 { 68 int n = i * cols + j; 69 return p[n]; 70 } 71 72 double Matrix::at(int i, int j) const 73 { 74 int n = i * cols + j; 75 return p[n]; 76 } 77 78 int Matrix::get_lines() const 79 { 80 return lines; 81 } 82 83 int Matrix::get_cols() const 84 { 85 return cols; 86 } 87 88 void Matrix::print() const 89 { 90 for (int i = 0; i < (lines * cols); i++) 91 { 92 cout << p[i] << ","; 93 if ((i+1) % cols == 0) 94 cout << endl; 95 } 96 cout << endl; 97 }
task_6.cpp
1 #include <iostream> 2 #include "matrix.hpp" 3 4 void test() { 5 using namespace std; 6 7 double x[] = { 1, 2, 3, 4, 5, 6 }; 8 9 Matrix m1(3, 2); // 创建一个3×2的矩阵 10 m1.set(x); // 用一维数组x的值按行为矩阵m1赋值 11 m1.print(); // 打印矩阵m1的值 12 cout << "the first line is: " << endl; 13 cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl; // 输出矩阵m1第1行两个元素的值 14 cout << endl; 15 16 Matrix m2(2, 3); 17 m2.set(x); 18 m2.print(); 19 cout << "the first line is: " << endl; 20 cout << m2.at(0, 0) << " " << m2.at(0, 1) << " " << m2.at(0, 2) << endl; 21 cout << endl; 22 23 Matrix m3(m2); // 用矩阵m2构造新的矩阵m3 24 m3.set(0, 0, 999); // 将矩阵m3第0行第0列元素值设为999 25 m3.print(); 26 } 27 28 int main() { 29 test(); 30 }
截图


浙公网安备 33010602011771号