在C ++中重载赋值运算符的操作

Ste*_*veC 2 c++ overloading variable-assignment operator-keyword

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

frac1 = frac2;
frac3 = frac4 * 2;
frac5 = frac6 * frac7;
Run Code Online (Sandbox Code Playgroud)

上面的操作按预期方式工作,但是以下操作与初始化时一样保留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
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*lia 5

operator=如果您只是在体内做些return *this;什么,您如何期望自己会做些有用的事情?你要分配到的领域this领域rightSide

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

顺便说一句,通常您使用复合运算符来实现“常规”运算符。您可能想看看运算符重载FAQ