我目前正在做以下练习:
一个通用的矩阵类(15 分)
a) 创建一个名为 Matrix 的类,它应该包含 M*N 个 double 类型的存储。就像之前一样,在选择如何存储数据时,了解我们以后将使用数据做什么通常很有用。在矩阵运算中,我们将根据列和/或行访问矩阵的不同元素,因此将 Matrix 的成员排序为数组很有用。此外,我们将需要更改存储在矩阵中的数据的大小,因此它应该是动态分配的。
b) 为矩阵创建构造函数。
创建以下三个构造函数: Matrix() • 默认构造函数,应将矩阵初始化为无效状态。
显式矩阵(无符号整数 N) • 应该构造一个有效的 NxN 矩阵,初始化为单位矩阵。(课程大纲中没有明确的关键字,但应该在这里使用。)
Matrix(unsigned int M, unsigned int N) • 应该构造一个有效的MxN 矩阵,初始化为一个零矩阵。(所有元素都为零。)
~Matrix() • Matrix 的析构函数,应该删除所有动态分配的内存。
到目前为止,我的课程如下:
class Matrix{
private:
int rows;
int columns;
double* matrix;
public:
Matrix();
explicit Matrix(int N);
Matrix(int M, int N);
~Matrix();
};
我的其余代码:
Matrix::Matrix(){
double * matrix = NULL;
}
Matrix::Matrix(int N){
double * matrix = new double[N * N];
this->rows = N;
this->columns = N;
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
if(i==j)
matrix[i * N + j] = 1;
else
matrix[i * N + j] = 0;
}
}
}
Matrix::Matrix(int M, int N){
double * matrix = new double[M * N];
this->rows = M;
this->columns = N;
for(int i = 0; i < M; i++){
for(int j = 0; j < N; j++)
matrix[i * N + j] = 0;
}
}
Matrix::~Matrix(){
delete [] matrix;
}
我是否正确创建了动态数组和构造函数?我稍后在练习中使用三个不同的构造函数创建三个不同的数组。我该怎么做?如果我尝试这样的事情
Matrix::Matrix();
Matrix::Matrix(3);
或者
Matrix::Matrix(3,4)
我收到以下错误:
Øving_6.exe 中 0x773c15de 处的未处理异常:0xC0000005:访问冲突读取位置 0xccccccc0。
我究竟做错了什么?