Различные аргументы в объявлении и определении перегруженных операторов - PullRequest
0 голосов
/ 03 января 2012

Объявление внутри класса:
Integer operator+ (const Integer& right);

Определение вне класса:

Integer operator+ (const Integer& left, const Integer& right)
{
    return left ;
}

Какой смысл для компилятора применять различные числовые аргументы в объявлении иопределение?

Ответы [ 3 ]

4 голосов
/ 03 января 2012

Вы объявили два разных operator+ там. Правильное внеклассное определение будет следующим:

Integer Integer::operator+(const Integer& right)
{
    return *this;
}
4 голосов
/ 03 января 2012

Первый - двоичный оператор, перегруженный как функция-член, а второй - двоичный оператор, перегруженный как функция, не являющаяся членом.

Когда оператор определен как член, число явных параметров уменьшается на единицу, поскольку вызывающий объект неявно предоставляется в качестве операнда. Таким образом, бинарные операторы принимают один явный параметр, а унарные - ни один. В случае бинарных операторов левый операнд является вызывающим объектом, и никакое приведение типов к нему не применяется.

В отличие от операторов, не являющихся членами, в которых может быть приведен левый операнд.

2 голосов
/ 03 января 2012

Они рассматриваются как два разных метода, т. Е. Это перегрузка метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...