Cod*_*ife 1 c++ operator-overloading
今天我老师给我看了下面的例子:
CFraction operator*(const CFraction &a, const CFraction &b){
CFraction x;
x.setNumerator(a.getNumerator()*b.getNumerator());
x.setDenominator(a.getDenominator()*b.getDenominator());
return x;
}
// ...
void main(){
CFraction b1,b2(3,7),b3(5,8);
b2=b1*3;
b2=3*b1;
}
Run Code Online (Sandbox Code Playgroud)
他说上面的代码可以正常工作,但是如果你将方法改为:
CFraction operator*(CFraction&,CFraction&);
Run Code Online (Sandbox Code Playgroud)
它不会起作用.这是为什么?
希望你能解释一下.
提前致谢.
它不会起作用.这是为什么?
让我们看看你的表达:
b2=b1*3;
Run Code Online (Sandbox Code Playgroud)
等于:
b2=operator*(b1,3);
Run Code Online (Sandbox Code Playgroud)
因为第二种类型不是CFraction必须转换为它的类型,即:
b2=operator*(b1,CFraction(3));
Run Code Online (Sandbox Code Playgroud)
CFraction(3)创建类型的临时对象CFraction.临时不是左值,因此不能作为左值引用传递 - CFraction &如果使用非const引用(也称为左值引用)定义函数,则在这种情况下不起作用.