C++ 超载'=';使'+';使用矩阵
这是一个具有存储2D动态数组的对象“矩阵”的类。我需要能够添加2个矩阵,并将元素之和放入结果矩阵。(即:c[1][1]将等于a[1][1]+b[1][1])。 但我想通过以下方式实现它:C++ 超载'=';使'+';使用矩阵,c++,matrix,operator-overloading,C++,Matrix,Operator Overloading,这是一个具有存储2D动态数组的对象“矩阵”的类。我需要能够添加2个矩阵,并将元素之和放入结果矩阵。(即:c[1][1]将等于a[1][1]+b[1][1])。 但我想通过以下方式实现它: Square_Matrix a,b,c; c = a + b; 这里是我的两个重载运算符,'='一个在'+'之外工作正常(因此a=b=c工作正常,矩阵被复制过来)。不幸的是,我的IDE上没有错误,程序只是关闭并说“Square_Matrix已经停止工作”。我怎样才能解决这个问题 我也不太确定我是否正确地实现了
Square_Matrix a,b,c;
c = a + b;
这里是我的两个重载运算符,'='一个在'+'之外工作正常(因此a=b=c工作正常,矩阵被复制过来)。不幸的是,我的IDE上没有错误,程序只是关闭并说“Square_Matrix已经停止工作”。我怎样才能解决这个问题
我也不太确定我是否正确地实现了我的“+”,有人说“return*this”不会起任何作用
//.h file
Square_Matrix& operator=(const Square_Matrix& Par2);
Square_Matrix& operator+(const Square_Matrix& Par3);
//.cpp file
Square_Matrix& Square_Matrix::operator=(const Square_Matrix& Par2){
if (size != Par2.size){
cout << "Matrices are of different size" << endl;
} else {
for (int i = 0; i < size; i++){
for (int j = 0; j < size; j++){
matrix[i][j] = Par2.matrix[i][j];
}
}
}
}
Square_Matrix& Square_Matrix::operator +(const Square_Matrix& Par3){
Square_Matrix result;
result.Set_Size(Par3.size);
for (int i = 0; i < Par3.size; i++){
for (int j = 0; j < Par3.size; j++){
result.matrix[i][j] = Par3.matrix[i][j]+matrix[i][j];
}
}
return *this;
}
/.h文件
平方矩阵和运算符=(常数平方矩阵和Par2);
平方矩阵和运算符+(常数平方矩阵和Par3);
//.cpp文件
平方矩阵和平方矩阵::运算符=(常数平方矩阵和Par2){
如果(尺寸!=Par2.size){
coutYourSquare\u矩阵和Square\u矩阵::运算符=(const Square\u矩阵和Par2)
应该以
return *this;
return result;
您的Square\u矩阵和Square\u矩阵::运算符+(const Square\u矩阵和Par3)
应以
return *this;
return result;
改变
Square_Matrix& Square_Matrix::operator +(const Square_Matrix& Par3)
到
您的运算符=
应以返回*this;
结尾。您的运算符+
应以返回结果;
结尾,并且不应返回引用。@remyabel:Fromoperator+
?这不是不返回引用的原因。您不返回引用是因为运算符+
应该是创造性的正在为函数本地生成一个新对象。如果您返回了对该对象的引用,则它将是一个悬空引用。另请参阅(查找运算符+
和运算符+=
的正确定义)很抱歉,这是一个输入错误,my=函数确实有return*this。返回结果似乎可以清除错误thanks@Foxic-首先,让operator=检查尺寸是对operator=应该做的事情的滥用。operator=应该有一个目的,而且只有一个目的,那就是复制。它不是供您编码的“业务规则”,例如由于大小不匹配而不制作副本。如果需要检查大小的函数,请为此目的创建另一个成员函数--不要为此使用运算符=。如果返回类型是引用,运算符+不应返回“result”。“result”“是一个局部变量,返回对局部变量的引用是很困难的。@PaulMcKenzie,你说得对。对不起,我忘了添加最后一个要求。”。