实验任务5
1 #pragma once 2 3 #include<iostream> 4 #include<cassert> 5 using std::cout; 6 using std::endl; 7 8 class vectorInt 9 { 10 private: 11 /* data */ 12 int size; 13 int *p; 14 public: 15 vectorInt(int n); 16 vectorInt(int n, int value); 17 vectorInt(const vectorInt &ve); 18 ~vectorInt(); 19 20 int &at(int index); 21 int get_size() const; 22 friend void output(vectorInt &v); 23 }; 24 25 vectorInt::vectorInt(int s) 26 { 27 size = s; 28 p = new int[size]; 29 cout << "constructor 1 called" << endl; 30 } 31 32 vectorInt::vectorInt(int s, int value) 33 { 34 size = s; 35 p = new int[size]; 36 for(auto i = 0; i < size; i++) 37 p[i] = value; 38 cout << "constructor 2 called" << endl; 39 } 40 41 vectorInt::vectorInt(const vectorInt &ve){ 42 size = ve.size; 43 p = new int[size]; 44 for(auto i = 0; i < size; i++) 45 p[i] = ve.p[i]; 46 cout << "copy constructor called" << endl; 47 } 48 49 vectorInt::~vectorInt() 50 { 51 delete[] p; 52 cout << "deconstructor called" << endl; 53 } 54 55 int &vectorInt::at(int index){ 56 assert(index >= 0 && index < size); 57 return p[index]; 58 } 59 60 int vectorInt::get_size() const{ 61 return size; 62 } 63 64 void output(vectorInt &v){ 65 for(auto i = 0; i < v.size; i++) 66 cout << v.p[i] << " " ; 67 cout << endl; 68 }vectorInt.hpp
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 }task5.cpp
运行结果截图:
实验任务6
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){ 33 lines = n; 34 cols = n; 35 p = new double[n*n]; 36 } 37 38 Matrix::Matrix(int n, int m){ 39 lines = n; 40 cols = m; 41 p = new double[n*m]; 42 } 43 44 Matrix::Matrix(const Matrix &X): lines{X.lines}, cols{X.cols} 45 { 46 p = new double[lines * cols]; 47 for(auto i = 0; i < lines * cols; i++) 48 p[i] = X.p[i]; 49 } 50 51 Matrix::~Matrix() 52 { 53 delete[] p; 54 } 55 56 void Matrix::set(const double *pvalue) 57 { 58 for (auto i = 0; i < lines * cols; i++) 59 { 60 if((pvalue+i) == NULL) 61 break; 62 p[i] = pvalue[i]; 63 } 64 } 65 66 void Matrix::set(int i,int j,int value){ 67 int index = i * cols + j; 68 p[index] = value; 69 } 70 71 double &Matrix::at(int i, int j) 72 { 73 int index = i * cols + j; 74 return p[index]; 75 } 76 77 double Matrix::at(int i, int j) const 78 { 79 return p[i * cols + j ]; 80 } 81 82 int Matrix::get_lines() const 83 { 84 return lines; 85 } 86 87 int Matrix::get_cols() const 88 { 89 return cols; 90 } 91 92 void Matrix::print() const 93 { 94 for(int i = 1; i <= lines; i++) 95 { 96 for (int j = 1; j <= cols; j++) 97 { 98 cout << p[(i-1) * cols + j - 1]; 99 if(j < cols) 100 cout << ","; 101 } 102 cout << endl; 103 } 104 }matrix.hpp
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 }task6.cpp
运行结果截图:
标签:const,Matrix,int,double,cols,实验,数组,vectorInt From: https://www.cnblogs.com/gkd-gkd/p/16855581.html