c++写一个矩阵类CMatrix基本要求如下:1.实现构造,拷贝构造与析构函数2.支持任意大小的矩阵:行数和列数可以动态设置(不用修改代码)3.重载操作符*,实现矩阵相乘4.重载操作符=实现矩阵赋值5.重载操作符++和--,分别实现矩阵元素同时+1和-1
时间: 2024-03-06 21:52:17 浏览: 82
C++代码的矩阵类,主要包括一些很基本的操作
好的,我可以帮你写一个矩阵类CMatrix,代码如下:
```c++
#include <iostream>
using namespace std;
class CMatrix {
public:
// 构造函数
CMatrix(int rows = 0, int cols = 0) {
this->rows = rows;
this->cols = cols;
data = new int *[rows];
for (int i = 0; i < rows; i++) {
data[i] = new int[cols];
memset(data[i], 0, cols * sizeof(int));
}
}
// 拷贝构造函数
CMatrix(const CMatrix &m) {
rows = m.rows;
cols = m.cols;
data = new int *[rows];
for (int i = 0; i < rows; i++) {
data[i] = new int[cols];
memcpy(data[i], m.data[i], cols * sizeof(int));
}
}
// 析构函数
~CMatrix() {
for (int i = 0; i < rows; i++) {
delete[] data[i];
}
delete[] data;
}
// 重载赋值运算符
CMatrix &operator=(const CMatrix &m) {
if (this == &m) {
return *this;
}
for (int i = 0; i < rows; i++) {
delete[] data[i];
}
delete[] data;
rows = m.rows;
cols = m.cols;
data = new int *[rows];
for (int i = 0; i < rows; i++) {
data[i] = new int[cols];
memcpy(data[i], m.data[i], cols * sizeof(int));
}
return *this;
}
// 重载乘法运算符
CMatrix operator*(const CMatrix &m) const {
if (cols != m.rows) {
cerr << "矩阵乘法维数不匹配!" << endl;
exit(1);
}
CMatrix res(rows, m.cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < m.cols; j++) {
for (int k = 0; k < cols; k++) {
res.data[i][j] += data[i][k] * m.data[k][j];
}
}
}
return res;
}
// 重载前缀++运算符
CMatrix &operator++() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
data[i][j]++;
}
}
return *this;
}
// 重载前缀--运算符
CMatrix &operator--() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
data[i][j]--;
}
}
return *this;
}
private:
int **data; // 二维数组存储矩阵元素
int rows; // 行数
int cols; // 列数
};
```
使用示例:
```c++
int main() {
CMatrix m1(2, 3);
CMatrix m2(3, 2);
CMatrix m3 = m1 * m2; // 矩阵乘法
++m3; // 矩阵元素+1
--m3; // 矩阵元素-1
CMatrix m4 = m3; // 矩阵赋值
return 0;
}
```
阅读全文