实验3 类和对象Ⅱ

四、实验结论

1.实验任务1-3

验证性实验。

2.实验任务4

  • 动态int型数组类Vector_int的定义实现源码(vector_int.hpp)

    #ifndef VECTOR_HPP
    #define VECTOR_HPP
    
    #include <iostream>
    #include <cassert>
    using namespace std;
    
    class Vector_int
    {
    public:
      Vector_int(int n);
      Vector_int(int n, int value);
      Vector_int(const Vector_int &x);
      ~Vector_int();
      int &at(int index);
      void show() const;
    
    private:
      int size;
      int *p;
    
    };
    
    Vector_int::Vector_int(int n) : size(n)
    {
      cout << "dynamic create array..." << endl;
      p = new int[n]();
    }
    
    Vector_int::Vector_int(int n, int value) : size(n)
    {
      cout << "dynamic create array..." << endl;
      p = new int[n];
      for (auto i = 0; i < n; i++)
      {
    ​    p[i] = value;
      }
    }
    
    Vector_int::Vector_int(const Vector_int &x) : size(x.size)
    {
      p = new int[size];
      for (auto i = 0; i < size; ++i)
    ​    p[i] = x.p[i];
    }
    
    Vector_int::~Vector_int()
    {
      cout << "deleting..." << endl;
      delete[] p;
    }
    
    int &Vector_int::at(int index)
    {
      assert(index >= 0 && index < size);
      return p[index];
    }
    
    void Vector_int::show() const
    {
        for (int i = 0; i < size; i++)
        {
            cout << p[i] << ' ';
        }
        cout << endl;
    }
    #endif
    
  • 测试类Vector_int的代码(文件task4.cpp)

    #include <iostream>
    #include "vector_int.hpp"
    using namespace std;
    
    int main()
    {
      int n;
      cin >> n;
      Vector_int x1(n);
      x1.show();
      Vector_int x2(n, 6);
      x2.show();
      Vector_int y(x2);
      y.at(0) = 999;
      y.show();
      return 0;
    }
    
  • 运行测试结果截图

3.实验任务5

  • 类Martrix的定义和实现完整代码(Matrix.hpp)

    #ifndef MATRIX_H
    #define MATRIX_H
    
    #include <iostream>
    #include <cassert>
    using namespace std;
    
    class Matrix
    {
    public:
      Matrix(int n);           // 构造函数,构造一个n*n的矩阵
      Matrix(int n, int m);        // 构造函数,构造一个n*m的矩阵
      Matrix(const Matrix &X);      // 复制构造函数,使用已有的矩阵X构造
      ~Matrix();             // 析构函数
      void set(const double *pvalue);   // 用pvalue指向的连续内存块数据为矩阵赋值
      void set(int i, int j, int value); // 设置矩阵第i行第j列元素值为value
      double &at(int i, int j);      // 返回矩阵第i行第j列元素的引用
      double at(int i, int j) const;   // 返回矩阵第i行第j列元素的值
      int get_lines() const;       // 返回矩阵行数
      int get_cols() const;        // 返回矩列数
      void print() const;         // 按行打印输出矩阵
    
    private:
      int lines; // 矩阵行数
      int cols;  // 矩阵列数
      double *p; // 指向存放矩阵数据的内存块的首地址
    };
    
    //  类Matrix的实现:
    Matrix::Matrix(int n) : lines(n), cols(n)
    {
      p = new double[n * n];
    }
    
    Matrix::Matrix(int n, int m) : lines(n), cols(m)
    {
      p = new double[n * m];
    }
    
    Matrix::Matrix(const Matrix &X) : lines(X.lines), cols(X.cols)
    {
      p = new double[lines * cols];
      for (auto i = 0; i < lines * cols; i++)
    ​    p[i] = X.p[i];
    }
    
    Matrix::~Matrix()
    {
      delete[] p
    }
    
    void Matrix::set(const double *pvalue)
    {
      for (auto i = 0; i < lines * cols; i++)
    ​    p[i] = pvalue[i];
    }
    
    void Matrix::set(int i, int j, int value)
    {
      assert(i >= 0 && i < lines && j >= 0 && j < cols);
      p[i * cols + j] = value;
    }
    
    double &Matrix::at(int i, int j)
    {
      assert(i >= 0 && i < lines && j >= 0 && j < cols);
      return p[i * cols + j];
    }
    
    double Matrix::at(int i, int j) const
    {
      assert(i >= 0 && i < lines && j >= 0 && j < cols);
      return p[i * cols + j];
    }
    
    int Matrix::get_lines() const
    {
      return lines;
    }
    
    int Matrix::get_cols() const
    {
      return cols;
    }
    
    void Matrix::print() const
    {
      for (int i = 0; i < lines; i++)
      {
    ​    for (int j = 0; j < cols; j++)
    ​    {
    ​      cout << p[i * cols + j];
    ​      if (j != cols - 1)
    ​        cout << ", ";
    ​    }
    ​    cout << endl;
      }
    }
    #endif
    
  • 测试代码(task5.cpp)

    #include <iostream>
    #include "matrix.hpp"
    
    int main()
    {
      using namespace std;
    
      double x[] = {1, 3, 6, 7, 8, 9};
    
      Matrix m1(3, 2);   // 创建一个3×2的矩阵
      m1.set(x);      // 用一维数组x的值按行为矩阵m1赋值
      m1.print();     // 打印矩阵m1的值
      cout << "the first line is: " << endl;
      cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl;
      cout << endl;
    
      Matrix m2(2, 3);
      m2.set(x);
      m2.print();
      cout << "the first line is: " << endl;
      cout << m2.at(0, 0) << " " << m2.at(0, 1) << " " << m2.at(0, 2) << endl;
      cout << endl;
    
      Matrix m3(m2);
      m3.set(0, 0, 117);
      m3.print();
    }
    
  • 运行测试截图

五、实验总结(选)

posted @ 2021-11-07 10:57  幸福^_^灿灿  阅读(18)  评论(2)    收藏  举报