gpt4 book ai didi

C++ 运算符重载

转载 作者:行者123 更新时间:2023-11-30 00:47:04 25 4
gpt4 key购买 nike

今天我的老师给我看了下面的例子:

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;
}

他说上面的代码可以正常工作,但是如果你把方法改成下面这样:

CFraction operator*(CFraction&,CFraction&);

那是行不通的。这是为什么?

希望你能给我解释一下。

提前致谢。

最佳答案

it wouldn't work. Why is that?

让我们看看你的表情:

b2=b1*3;

等于:

b2=operator*(b1,3);

因为第二种类型不是 CFraction 的类型,所以必须将其转换为它,即:

b2=operator*(b1,CFraction(3));

CFraction(3) 创建 CFraction 类型的临时对象。 Temporary 不是左值,因此不能作为左值引用传递 - CFraction & 并且如果您使用非 const 引用(也称为左值引用)定义您的函数,则在这种情况下将不起作用。

关于C++ 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35870148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com