Ole*_*991 5 c++ class matrix dynamic-arrays
我目前正在做以下练习:
通用 Matrix 类(15 磅)
a) 创建一个名为 Matrix 的类,它应该包含 M*N 类型双精度数的存储。就像之前一样,在选择如何存储数据时,了解我们以后将要使用的数据通常很有用。在矩阵运算中,我们将根据列和/或行访问矩阵的不同元素,因此将 Matrix 的成员作为数组进行排序很有用。此外,我们将需要更改存储在矩阵中的数据的大小,因此应该动态分配。
b) 为矩阵创建构造函数。
创建以下三个构造函数: Matrix() • 默认构造函数,应将矩阵初始化为无效状态。
显式 Matrix(unsigned int N) • 应构造一个有效的 NxN 矩阵,初始化为单位矩阵。(explicit 关键字不在教学大纲中,但应在此处使用。)
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();
};
Run Code Online (Sandbox Code Playgroud)
我的其余代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
我是否正确创建了动态数组和构造函数?我稍后在练习中使用三个不同的构造函数创建三个不同的数组。我该怎么做?如果我尝试这样的事情
Matrix::Matrix();
Matrix::Matrix(3);
Run Code Online (Sandbox Code Playgroud)
或者
Matrix::Matrix(3,4)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Øving_6.exe 中 0x773c15de 处的未处理异常:0xC0000005:访问冲突读取位置 0xccccccc0。
我究竟做错了什么?
在你的构造函数中,你定义了一个局部变量
double * matrix = new double[N * N];
Run Code Online (Sandbox Code Playgroud)
它隐藏了您的同名成员变量,因此该成员永远不会被初始化。
您只需要将其更改为
matrix = new double[N * N];
Run Code Online (Sandbox Code Playgroud)
this->除非绝对需要消除歧义(几乎从不),否则用于成员访问是非常非 C++ 的