以下是完整的代码实现: ```cpp #include <iostream> using namespace std; class Matrix { private: int row, col; // 矩阵的行数和列数 int *m; // 用于存放矩阵元素的一级指针 public: // 带参数的构造函数,初始化矩阵的行数、列数,并动态分配内存 Matrix(int r, int c) : row(r), col(c) { m = new int[row * col]; // 输入矩阵元素 for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { cin >> m[i * col + j]; } } } // 默认构造函数,初始化一个 3x3 的矩阵 Matrix() { row = 3; col = 3; m = new int[row * col]; } // 析构函数,释放动态分配的内存 ~Matrix() { delete[] m; } // 重载加法运算符 Matrix operator+(const Matrix& other) const { if (row != other.row || col != other.col) { cout << "program terminated!" << endl; exit(1); } Matrix result(row, col); for (int i = 0; i < row * col; i++) { result.m[i] = m[i] + other.m[i]; } return result; } // 重载赋值运算符 Matrix& operator=(const Matrix& other) { if (this == &other) { return *this; } if (row != other.row || col != other.col) { cout << "program terminated!" << endl; exit(1); } for (int i = 0; i < row * col; i++) { m[i] = other.m[i]; } return *this; } // 显示矩阵元素 void disp() { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { cout << m[i * col + j] << " "; } cout << endl; } } }; int main() { int row_a, col_a, row_b, col_b; cin >> row_a >> col_a; Matrix A(row_a, col_a); cin >> row_b >> col_b; Matrix B(row_b, col_b), C; C = A + B; C.disp(); A = B; A.disp(); return 0; } ``` 代码解释: 1. 构造函数: - `Matrix(int r, int c)`:接受矩阵的行数和列数作为参数,动态分配内存并输入矩阵元素。 - `Matrix()`:默认构造函数,初始化一个 3x3 的矩阵。 2. 析构函数: - `~Matrix()`:释放动态分配的内存,防止内存泄漏。 3. 重载加法运算符: - `Matrix operator+(const Matrix& other) const`:检查两个矩阵的行数和列数是否相等,如果不相等则输出错误信息并退出程序;否则创建一个新的矩阵,将对应元素相加并返回。 4. 重载赋值运算符: - `Matrix& operator=(const Matrix& other)`:检查是否为自我赋值,如果是则直接返回;检查两个矩阵的行数和列数是否相等,如果不相等则输出错误信息并退出程序;否则将右矩阵的元素复制到左矩阵。 5. 显示矩阵元素: - `void disp()`:按行输出矩阵的元素。 额外需要注意的逻辑点: 1. 在重载赋值运算符时,要注意自我赋值的情况,避免不必要的操作。 2. 动态分配内存后,一定要在析构函数中释放内存,防止内存泄漏。 3. 在进行矩阵运算时,要检查矩阵的行数和列数是否符合要求,避免出现错误。 [2025-06-23 15:27:43 | AI写代码神器 | 993点数解答]