写一个矩阵类cMatrix,基本要求如下: 实现构造、拷贝构造与析构函数,支持任意大小的矩阵:行数和列数可以动态设置(不用修改代码)
时间: 2024-03-07 22:46:58 浏览: 77
好的,下面是矩阵类 `cMatrix` 的代码实现,包含构造、拷贝构造和析构函数,并且支持任意大小的矩阵,行数和列数可以动态设置:
```cpp
class cMatrix {
private:
int rows; // 矩阵的行数
int cols; // 矩阵的列数
float* data; // 矩阵的数据指针
public:
// 默认构造函数
cMatrix() : rows(0), cols(0), data(nullptr) {}
// 带参数构造函数
cMatrix(int r, int c) : rows(r), cols(c) {
data = new float[rows * cols];
memset(data, 0, sizeof(float) * rows * cols);
}
// 拷贝构造函数
cMatrix(const cMatrix& other) : rows(other.rows), cols(other.cols) {
data = new float[rows * cols];
memcpy(data, other.data, sizeof(float) * rows * cols);
}
// 析构函数
~cMatrix() {
if (data != nullptr) {
delete[] data;
data = nullptr;
}
}
// 设置矩阵行数和列数
void setRowsCols(int r, int c) {
if (r != rows || c != cols) {
if (data != nullptr) {
delete[] data;
data = nullptr;
}
rows = r;
cols = c;
data = new float[rows * cols];
memset(data, 0, sizeof(float) * rows * cols);
}
}
};
```
在这个实现中,我们增加了一个 `setRowsCols` 函数,用来动态设置矩阵的行数和列数。在该函数中,我们先检查是否需要重新分配内存,如果需要,则释放旧内存,重新分配新内存,并将数据初始化为 0。这样,我们就可以支持任意大小的矩阵,并且在运行时动态设置行数和列数,而不需要修改代码。
阅读全文