gpt4 book ai didi

c++ - 在c++中操作重载赋值运算符

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:25 24 4
gpt4 key购买 nike

我最近一直在做一个分数类,重载运算符时我没有得到预期的结果,我不确定为什么。希望有人可以帮助阐明一些问题。我尝试只包含相关代码。

const fraction fraction::operator* (fraction frac)
{
return fraction(frac.numerator * numerator, frac.denominator * denominator);
}

const fraction fraction::operator* (int num)
{
return fraction(numerator*num, denominator);
}

fraction& fraction::operator= (const fraction &rightSide)
{
return *this;
}

这些操作是我发现可以正常工作的操作(其中 frac# 是分数对象):

frac1 = frac2;
frac3 = frac4 * 2;
frac5 = frac6 * frac7;

上述操作按预期工作,但以下操作使 frac8 保持初始化状态:

fraction frac8(4, 5); // Initializes a fraction, setting numerator = 4, denominator = 5
frac8 = frac8 * 3; // This doesn't quite work, leaving frac8 with the original numerator/denominator

我只是不明白为什么 frac3 = frac4 * 2 有效而 frac8 = frac8 * 3 无效。有任何想法吗?我发现在赋值运算符中使用 const 关键字不是解决方案。

最佳答案

如果您只是在其主体中执行 return *this;,您如何期望您的 operator= 做任何有用的事情?您必须将 rightSide 的字段分配给 this 的字段。

但是,更重要的是,如果您的类不管理在复制时需要某些特殊处理的资源,您可以使用编译器提供的赋值运算符。它只是将一个实例的字段复制到另一个实例中,对于 fraction 类来说,这似乎非常好。

顺便说一句,通常您使用复合运算符来实现“常规”运算符;你可能想看看 operator overloading FAQ .

关于c++ - 在c++中操作重载赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063788/

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