实验四

实验四

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 }

截图

 

posted @ 2022-11-09 00:02  Z`x  阅读(16)  评论(0)    收藏  举报