实验4 类与数组

实验任务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[] = {8, 7, 6, 5, 4, 3, 2, 1};
 8 
 9     Matrix m1(4, 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, 4);
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) << m2.at(0, 3) << endl;
21     cout << endl;
22 
23     Matrix m3(m2);      // 用矩阵m2构造新的矩阵m3
24     m3.set(0, 0, 100);  // 将矩阵m3第0行第0列元素值设为999
25     m3.print();
26 }
27 
28 int main() {
29     test();
30 }
task6.cpp

 

运行结果截图:

 

posted @ 2022-11-03 19:23  wch824  阅读(28)  评论(0)    收藏  举报