C++运算符重载

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)

它不会起作用.这是为什么?

希望你能解释一下.

提前致谢.

Sla*_*ica 5

它不会起作用.这是为什么?

让我们看看你的表达:

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引用(也称为左值引用)定义函数,则在这种情况下不起作用.