实验3 类与对象Ⅱ
- 实验任务4
source code in Vector_int.hpp :
1 #include <iostream> 2 using namespace std; 3 class Vector_int{ 4 public: 5 Vector_int(int n); 6 Vector_int(int n,int v); 7 Vector_int(const Vector_int &x); 8 ~Vector_int(){ 9 delete[] p; 10 cout<<"Delete.."<<endl; 11 }; 12 int &at(int index); 13 private: 14 int size; 15 int value; 16 int index; 17 int *p; 18 }; 19 Vector_int::Vector_int(int n):size(n){ 20 p=new int[n]; 21 for(int i=0;i<size;i++) 22 p[i]=0; 23 cout<<"Construct with one argue..."<<endl; 24 } 25 Vector_int::Vector_int(int n,int v):size(n),value(v){ 26 p=new int[n]; 27 for(int i=0;i<size;i++) 28 p[i]=value; 29 30 cout<<"Construct with two argue..."<<endl; 31 } 32 Vector_int::Vector_int(const Vector_int &x):size(x.size){ 33 p=new int[size]; 34 for(int i=0;i<size;i++) 35 p[i]=x.p[i]; 36 37 cout<<"deep copy..."<<endl; 38 } 39 int &Vector_int::at(int ind){ 40 return p[ind]; 41 }
source code in task4.cpp :
1 #include "Vector_int.hpp" 2 int main() { 3 using namespace std; 4 int n; 5 cin>>n; 6 Vector_int x(n); 7 Vector_int x_(n,6); 8 cout<<x_.at(0)<<endl; 9 Vector_int y(x); 10 y.at(0)=999; 11 cout<<y.at(0)<<endl; 12 }
The Running results :
- 实验任务5
source code in Matrix.hpp :
1 #ifndef MATRIX_H 2 #define MATRIX_H 3 #include<iostream> 4 using namespace std; 5 class Matrix{ 6 public: 7 Matrix(int n); // 构造函数,构造一个n*n的矩阵 8 Matrix(int n, int m); // 构造函数,构造一个n*m的矩阵 9 Matrix(const Matrix &X); // 复制构造函数,使用已有的矩阵X构造 10 ~Matrix(); //析构函数 11 void set(const double *pvalue); // 用pvalue指向的连续内存块数据为矩阵赋值 12 void set(int i, int j, int value); //设置矩阵第i行第j列元素值为value 13 double &at(int i, int j); //返回矩阵第i行第j列元素的引用 14 double at(int i, int j) const; // 返回矩阵第i行第j列元素的值 15 int get_lines() const; //返回矩阵行数 16 int get_cols() const; //返回矩列数 17 void print() const; // 按行打印输出矩阵 18 private: 19 int lines; // 矩阵行数 20 int cols; // 矩阵列数 21 double *p; // 指向存放矩阵数据的内存块的首地址 22 }; 23 Matrix::Matrix(int n):lines(n),cols(n){ 24 p=new double[lines*cols]; 25 } 26 Matrix::Matrix(int n,int m):lines(n),cols(m){ 27 p=new double[lines*cols]; 28 } 29 Matrix::Matrix(const Matrix &X):lines(X.lines),cols(X.cols){ 30 p=new double[lines*cols]; 31 for(int i=0;i<lines;i++) 32 for(int j=0;j<cols;j++) 33 p[i*lines+j]=X.p[i*lines+j]; 34 } 35 Matrix::~Matrix(){ 36 delete[] p; 37 } 38 void Matrix::set(const double *pvalue){ 39 for(int i=0;i<lines;++i) 40 for(int j=0;j<cols;++j) 41 p[i*lines+j]=*pvalue++; 42 } 43 void Matrix::set(int i, int j, int value){ 44 p[i*lines+j]=value; 45 } 46 double& Matrix::at(int i, int j){ 47 return p[i*lines+j]; 48 } 49 double Matrix::at(int i, int j) const{ 50 return p[i*lines+j]; 51 } 52 int Matrix::get_lines() const{ 53 return lines; 54 } 55 int Matrix::get_cols() const{ 56 return cols; 57 } 58 void Matrix::print() const{ 59 for(int i=0;i<lines;++i){ 60 for(int j=0;j<cols;++j){ 61 cout<<p[i*lines+j]; 62 63 if(j!=cols-1) 64 cout<<","; 65 else 66 cout<<endl; 67 } 68 } 69 } 70 #endif
The Running results :