如果调用对象不是类对象,如何重载operator +?

时间:2018-02-24 22:14:40

标签: c++ operator-overloading

Class fraction
{
public:
      fraction operator+ (const fraction& fr) const;
private:
      int num; //numerator 
      int den; //denominator
};

我想覆盖运算符+,以便它执行整数常量(调用对象)和分数的乘法。

fraction fraction::operator+ (const fraction& fr) const
{
    fraction result;

    result.num = fr.num + fr.den * (*this);
    //error message says invalid operands to binary exprssion ('int' and 'constant fraction')
    result.den = fr.den;

    simplified_fr(result); // a helper function to simplify the resulted fraction 
    return result;
}

似乎问题在于调用对象的类型。我打算让它成为一个常数整数,但计算机认为它是一个常数分数'。有人可以告诉我为什么会这样,我该如何解决?提前谢谢!!!

1 个答案:

答案 0 :(得分:0)

我认为你想做到这样的事情:

fraction fract;
fraction fract2 = 2 + fract;

答案是,您不能为非类对象重载成员方法运算符+。但是你可以定义/重载全局运算符+函数:

fraction operator+(int num, const fraction& rFrac)
{
//your implementation
}

您可能需要访问fraction课程的私人成员。这可以通过让操作员+成为朋友来实现:

class fraction
{
    //...
    friend fraction operator+(int num, const fraction& rFrac);
    //...
}