оператор + вопрос о перегрузке - PullRequest
2 голосов
/ 14 июня 2011

Почему этот код выдает сообщение об ошибке "IntelliSense: слишком много параметров для этой операторской функции"

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

PerfectNum - обычный класс, а thenum - int. Этот метод в классе.

Ответы [ 4 ]

6 голосов
/ 14 июня 2011

Вы определяете это как функцию-член, верно?

В этом случае левая сторона просто *this:

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

// .cpp
int PerfectNum::operator+(const PerfectNum &other) const
{
    return this->thenum + other.thenum;
}
4 голосов
/ 14 июня 2011

Вы должны сделать свой оператор не-функцией.

1 голос
/ 14 июня 2011

Оператор перегрузки +, конечно, не должен быть дружественной / свободной функцией при объявлении как метод класса Вот очень простая реализация:

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);
}
1 голос
/ 14 июня 2011

Оператор + должен быть функцией, не являющейся членом.Тип возвращаемого значения должен быть константным объектом.Если вы определили оператор =, то всегда лучше также определить оператор + =.Таким образом, вы можете реализовать оператор + в терминах оператора + =.

const PerfectNum operator+(const PerfectNum& lhs, const PerfectNum& rhs)
{
     PerfectNum ret(lhs);
     ret += rhs;
     return rhs;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...