現在、次の演習を行っています。
ジェネリックMatrixクラス(15ポイント)
a)Matrixというクラスを作成します。このクラスには、double型のM*N数のストレージが含まれている必要があります。以前と同じように、データの保存方法を選択するときは、後でデータを何に使用するかを知っておくと便利なことがよくあります。行列操作では、列や行に基づいて行列のさまざまな要素にアクセスするため、行列のメンバーを配列として並べ替えると便利です。また、マトリックスに格納されているデータのサイズを変更する必要があるため、動的に割り当てる必要があります。
b)マトリックスのコンストラクターを作成します。
次の3つのコンストラクターを作成します。Matrix()•デフォルトのコンストラクター。マトリックスを無効な状態に初期化する必要があります。
明示的な行列(unsigned int 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;
}
動的配列とコンストラクターを正しく作成しましたか?演習の後半で、3つの異なるコンストラクターを使用して3つの異なる配列を作成します。どうすればこれを正しく行うことができますか?私がこのようなことをしようとしたら
Matrix::Matrix();
Matrix::Matrix(3);
また
Matrix::Matrix(3,4)
次のエラーが発生します:
Øving_6.exeの0x773c15deでの未処理の例外:0xC0000005:アクセス違反の読み取り場所0xccccccc0。
私は何が間違っているのですか?