【发布时间】:2013-12-12 18:13:10
【问题描述】:
我在使用重载的 * 运算符乘以对象时遇到问题
在类中,我将运算符定义为:
const Matrix operator*(Matrix& B);
实现是
const Matrix Matrix::operator* (Matrix& B){
Matrix r = Matrix(B.M,B.N);
for(int i = 0; i < r.M; i++){
for(int j = 0; j < r.N; j++){
r.data[i*N+j] = (*this)(i,j) * (int)B(i,j);
}
}
return r;
}
当我打电话时
Matrix C = A * B
我会得到预期的结果,但是调用
C = C * C
导致错误。
我猜它与调用对象 C 相关,但我不确定该怎么做!
编辑:
我的赋值运算符。矩阵 R 是深拷贝。
Matrix Matrix::operator=(Matrix& B){
Matrix r(M,N);
for(int i = 0; i < M; i++){
for(int j = 0; j < N; j++){
r.data[i*N+j] = B(i,j);
}
}
return r;
}
【问题讨论】:
-
什么样的错误?编译时还是运行时?如果它是运行时的,它会崩溃,还是只会给出不正确的结果?
-
我建议将函数签名更改为
Matrix Matrix::operator* (Matrix const& B) const。 -
只有方阵可以自身相乘
-
这是我的朋友。假设 C 是 5x5。
-
@Billy Jake O'Connor:你对
Matrix类的复制赋值运算符做了什么?您的错误在那里,而不是在您发布的内容中。
标签: c++ object overloading operator-keyword