运算符+过载问题

时间:2011-06-13 22:25:36

标签: c++ operator-overloading

为什么此代码会显示错误消息“IntelliSense:此操作符函数的参数太多”

int operator+(PerfectNum a,PerfectNum b)
{
    return (a.thenum+b.thenum);
}

PerfectNum是一个常规类,而thenum是一个int。 这个方法在课堂上。

4 个答案:

答案 0 :(得分:6)

您将此定义为成员函数,对吗?

在这种情况下,左侧只是*this

// .h
class PerfectNum
{
    public:
    int operator+(PerfectNum other) const;
};

// .cpp
int PerfectNum::operator+(const PerfectNum &other) const
{
    return this->thenum + other.thenum;
}

答案 1 :(得分:4)

您需要让您的运营商成为非会员功能。

答案 2 :(得分:1)

运算符+应该是非成员函数。返回类型应该是const对象。如果你有operator = defined,那么最好还定义operator + =。因此,您可以根据operator + =。

实现operator +
const PerfectNum operator+(const PerfectNum& lhs, const PerfectNum& rhs)
{
     PerfectNum ret(lhs);
     ret += rhs;
     return rhs;
}

答案 3 :(得分:1)

当声明为类方法时,重载operator +当然不应该是friend / free函数。这是一个非常简单的实现:

class PerfectNum {
    public:
        PerfectNum(int);
        PerfectNum(const PerfectNum&);
        PerfectNum operator+(const PerfectNum&) const;
    private:
        int mNumber;
};

PerfectNum PerfectNum::operator+(const PerfectNum& rhs) const
{
    return PerfectNum(this->mNumber + rhs.mNumber);
}