类中的动态数组

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。

我究竟做错了什么?

mol*_*ilo 5

在你的构造函数中,你定义了一个局部变量

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++ 的