实验3 类和对象II

实验任务4

"vector_int.hpp"

 1 #include <iostream>
 2 #include <cassert>
 3 using namespace std;
 4 
 5 class Vector_int {
 6 public:
 7     Vector_int(int n);
 8     Vector_int(int n, int value);
 9     Vector_int(const Vector_int &x);
10     ~Vector_int();
11     int& at(int index);
12     void print();
13     
14 private:
15     int size;
16     int* m;
17 }; 
18 
19 Vector_int::Vector_int(int n): size(n) {
20     m = new int[size];
21     for(int i = 0; i < size; i++)
22         m[i] = 0;
23     cout << "The array has been created." << endl;
24 } 
25 
26 Vector_int::Vector_int(int n, int value): size(n) {
27     m = new int[size];
28     for(int i = 0; i < size; i++)
29         m[i] = value;
30     cout << "The array has been created and every data item in it has been initialized as " << value << endl;
31 } 
32 
33 Vector_int::Vector_int(const Vector_int &x): size(x.size) {
34     m = new int[size];
35     for(int i = 0; i < size; i++)
36         m[i] = x.m[i];
37     cout << "Copy constructor called." << endl;
38 }
39 
40 Vector_int::~Vector_int() {
41     delete[] m;
42     cout << "Destructor called." << endl;
43 }
44 
45 int& Vector_int::at(int index) {
46     assert(index >= 0 && index < size);
47     return m[index];
48 }
49 
50 void Vector_int::print() {
51     for (int i = 0; i < size; i++)
52         cout << m[i] << " ";
53     cout << endl;
54 }

"task4.cpp"

 1 #include <vector_int.hpp>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 int main() {
 6     Vector_int arr1(8);
 7     Vector_int arr2(10, 7);
 8     Vector_int arr3(arr1);
 9     arr2.at(6) = 4;
10     
11     cout << "arr1:" << endl;
12     arr1.print();
13     cout << "arr2:" << endl;
14     arr2.print();
15     cout << "arr3:" << endl;
16     arr3.print();
17     
18     return 0; 
19 }

运行结果

 实验任务5

"Matrix.hpp"

 1 #include <iostream>
 2 using namespace std;
 3  
 4 class Matrix {
 5 public:
 6     Matrix(int n); // 构造函数,构造一个n*n的矩阵
 7     Matrix(int n, int m); // 构造函数,构造一个n*m的矩阵
 8     Matrix(const Matrix &X); // 复制构造函数,使用已有的矩阵X构造
 9     ~Matrix(); //析构函数
10     void set(const double *pvalue); // 用pvalue指向的连续内存块数据按行为矩阵赋值 
11     void set(int i, int j, int value); //设置矩阵第i行第j列元素值为value
12     double &at(int i, int j); //返回矩阵第i行第j列元素的引用
13     double at(int i, int j) const; // 返回矩阵第i行第j列元素的值
14     int get_lines() const; //返回矩阵行数
15     int get_cols() const; //返回矩列数
16     void print() const; // 按行打印输出矩阵
17 private:
18     int lines; // 矩阵行数
19     int cols; // 矩阵列数
20     double *p; // 指向存放矩阵数据的内存块的首地址
21 };
22 
23 Matrix::Matrix(int n): lines(n), cols(n) {
24     p = new double[n * n];
25 }
26 
27 Matrix::Matrix(int n, int m): lines(n), cols(m) {
28     p = new double[n * m];
29 }
30 
31 Matrix::Matrix(const Matrix &X): lines(X.lines), cols(X.cols) { 
32     p = new double[lines * cols];
33     for (int i = 0; i < lines * cols; i++)
34          p[i] = X.p[i]; 
35 }
36 
37 Matrix::~Matrix() {
38     delete[] p;
39 } 
40 
41 void Matrix::set(const double *pvalue) {
42     for (int i = 0; i < lines * cols; i++)
43         p[i] = pvalue[i];
44 }
45 
46 void Matrix::set(int i, int j, int value) {
47     p[i * lines + j] = value;
48 }
49 
50 double& Matrix::at(int i, int j) {
51     return p[i * lines + j];
52 }
53 
54 double Matrix::at(int i, int j) const {
55     return p[i * lines + j];
56 }
57 
58 int Matrix::get_lines() const {
59     return lines;
60 }
61 
62 int Matrix::get_cols() const {
63     return cols;
64 }
65 
66 void Matrix::print() const {
67     for (int i = 0; i < lines; i++) {
68         for (int j = 0; j < cols; j++)
69             cout << p[i * cols + j] << " ";
70         cout << endl;
71     }
72 }

"task5.cpp"

 1 #include <Matrix.hpp>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 int main() {
 6     double x[] = {3, 1, 4, 1, 5, 9};
 7     Matrix m1(3, 2); // 创建一个3×2的矩阵
 8     m1.set(x); // 用一维数组x的值按行为矩阵m1赋值
 9     m1.print(); // 打印矩阵m1的值
10     cout << "the first line is: " << endl;
11     cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl; // 输出矩阵m1第1行两个元素的值
12     cout << endl;
13     Matrix m2(2, 3);
14     m2.set(x);
15     m2.print();
16     cout << "the first line is: " << endl;
17     cout << m2.at(0, 0) << " " << m2.at(0, 1) << " " << m2.at(0, 2) << endl;
18     cout << endl;
19     Matrix m3(m2); // 用矩阵m2构造新的矩阵m3
20     m3.set(0, 0, 65); // 将矩阵m3第0行第0列元素值设为65
21     m3.print();
22 }

运行结果

 

posted on 2021-11-06 13:34  Yukito0209  阅读(33)  评论(3)    收藏  举报