我需要一些幫助來爲我的類中的動態數組實現一個拷貝構造函數和一個operator = =。 林不允許在這一點上拷貝構造函數和operator =爲一個類中的動態數組
這裏使用向量是MYE代碼: 類:
class Matrix{
private:
int rows;
int columns;
double* matrix;
public:
Matrix();
explicit Matrix(int N);
Matrix(int M, int N);
void setValue(int M, int N, double value);
double getValue(int M, int N);
bool isValid() const;
int getRows();
int getColumns();
~Matrix();
friend ostream& operator<<(ostream &out, Matrix&matrix1);
};
而且我的代碼:
Matrix::Matrix(){
matrix = NULL;
}
Matrix::Matrix(int N){
matrix = new double[N * N];
rows = N;
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){
matrix = new double[M * N];
rows = M;
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;
}
void Matrix::setValue(int M, int N, double value){
matrix[M * columns + N] = value;
}
double Matrix::getValue(int M, int N){
return matrix[M * columns + N];
}
bool Matrix::isValid() const{
if(matrix==NULL)
return false;
else
return true;
}
int Matrix::getRows(){
return rows;
}
int Matrix::getColumns(){
return columns;
}
ostream& operator<<(ostream &out, Matrix&matrix1){
if(matrix1.isValid())
for(int i = 0; i < matrix1.getRows(); i++){
for(int j = 0; j < matrix1.getColumns(); j++)
out << matrix1.getValue(i,j) << "\t";
out << endl;
}
else
out << "Matrisen er ikke gyldig."; //the matrix is not valid
return out;
}
會是這樣的工作?
Matrix &operator=(const Matrix &m) {*(this->matrix) = *(m.matrix);}
Matrix(const Matrix &rhs) : matrix(0) {
this->matrix = new double();
*(this->matrix) = *(rhs.matrix);
}
我也要重載運算符+ =和+。 我試圖執行此爲:
const Matrix operator+=(Matrix matrix1, Matrix matrix2){
if(!matrix1.isValid() || !matrix2.isValid()){
cout << "En av matrisene er ugyldig"; //one of the matrices are invalid
return Matrix::Matrix(); //returning a NULL matrix
}
else{
if(matrix1.getColumns()==matrix2.getColumns() && matrix1.getRows()==matrix2.getRows()){
Matrix temp(matrix1.getRows(), matrix1.getColumns());
for(int i = 0; i < matrix1.getRows(); i++){
for(int j = 0; j < matrix1.getColumns(); j++)
temp.setValue(i,j,(matrix1.getValue(i,j) + matrix2.getValue(i,j)));
}
return temp;
}
else{
cout << "Matrisene har ikke samme dimensjon"; //the matrices does not have the same dimensions
return Matrix::Matrix();
}
}
}
const Matrix operator+(Matrix matrix1, Matrix matrix2){
return matrix1 += matrix2;
}
會這樣的工作?將運營商作爲班級的一部分,班級的朋友還是班級之外的人,是否更好?
任何幫助appriciated。
在C++中,我們通常使用標準庫:std :: vector,std :: map等。它會更加易於修改,並且不易出錯。 – 2013-03-13 11:01:52
我期望陳述'*(this-> matrix)= *(m.matrix);'不起作用,您需要明確分配內存並使用memcpy等來分配新內存。 – 2013-03-13 11:02:38
我已經包含了「using namespace std;」並且在原始文件中的代碼開始處也包含「#include」,但是當我發佈該文件時,我沒有複製它。如果這就是你的意思。 –
Ole1991
2013-03-13 11:05:30