내 클래스의 동적 배열에 대해 복사 생성자 및 연산자 = 연산자를 구현하는 데 도움이 필요합니다. 필자는이 시점 여기클래스 내부의 동적 배열에 대한 생성자 및 연산자 복사
에서 벡터를 사용할 수 없습니다 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;
}
겠습니까 뭔가 :이 등을 구현하기 위해 노력했습니다 ? 연산자를 클래스의 일부로, 클래스의 친구로 또는 클래스 외부로 오버로드하는 것이 좋습니다.
도움이 필요합니다.
를 ++ 우리는 일반적으로 표준 라이브러리를 사용하십시오 : std :: vector, std :: map 등등. 그것은 훨씬 더 redable하고 덜 오류가 발생하기 쉽습니다. –
나는 '* (this-> matrix) = * (m.matrix);'라는 문장을 기대한다. 작동하지 않으면 명시 적으로 메모리를 할당하고 memcpy 등을 사용하여 새 메모리를 할당해야합니다. –
"using namespace std;"줄을 포함 시켰습니다. 또한 원래 파일의 코드 시작 부분에 "#include"이 있지만 게시 할 때 복사하지 않았습니다. 그것이 당신이 의미하는 바라면. –
Ole1991