C++ 实现矩阵类:重载运算符加与赋值,含构造、析构及错误处理
以下是完整的代码实现: ```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. 在进行矩阵运算时,要检查矩阵的行数和列数是否符合要求,避免出现错误。 ######[AI写代码神器 | 993点数解答 | 2025-06-23 15:27:43]
- C++ 实现:轻松计算两个矩阵的乘法并输出结果(字节豆包 | 381点数解答 | 2025-12-03 19:20:23)115
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)349
- 多语言实现给变量 scolor1 与 scolor2 赋值“red”的代码示例(阿里通义 | 170点数解答 | 2024-05-20 22:29:55)278
- Python实战:创建100个学生实例,实现欢迎语与学生列表添加(GPT | 426点数解答 | 2024-12-17 16:48:18)280
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)319
- Python开发必知://、%、**运算符深度解析(阿里通义 | 317点数解答 | 2023-11-08 00:49:49)973
- Android 开发:Kotlin 中简洁实用的 Elvis 运算符全解析(百度文心 | 231点数解答 | 2023-11-09 17:28:21)271
- Android开发:Kotlin双感叹号(!!)运算符全解析及使用风险(百度文心 | 334点数解答 | 2023-11-09 17:28:33)295
- Python+Tkinter:打造30以内加减乘除随机出题、判题打分GUI小程序(GPT | 1266点数解答 | 2024-06-19 14:45:56)330
- Python 复数类 Complex:前置与后置自增运算符重载全解析(字节豆包 | 357点数解答 | 2025-06-06 17:22:02)133
- Python 实现:根据规则判定 2^n×2^n 方阵中作弊者的赦免命运(字节豆包 | 247点数解答 | 2024-11-03 10:30:46)193
- C语言实现:解决2ⁿ×2ⁿ方阵作弊者赦免问题(字节豆包 | 370点数解答 | 2024-11-03 10:31:31)213