Написание реализации для операторного метода - PullRequest
0 голосов
/ 06 апреля 2011

Итак, у меня есть класс LongInt, у которого будет новое определение для операторов + и *. Инициализация в заголовочном файле выглядит следующим образом:

friend LongInt operator+(const LongInt& x, const LongInt& y);
friend LongInt operator*(const LongInt& x, const LongInt& y);

однако в моем файле реализации, где я определяю методы, найденные в заголовке, VS не распознает функцию operator + или operator * как указанную в заголовке. Я использую код:

friend LongInt LongInt::operator+(const LongInt& x, const LongInt& y)
{

}

и

friend LongInt LongInt::operator*(const LongInt& x, const LongInt& y)
{

}

Есть идеи, почему этот код не работает, когда я пытаюсь определить операторы?

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Ключевое слово friend используется только при объявлении или определении оператора внутри класса; при объявлении оператора как friend внутри класса и определении его в другом месте, friend используется только в объявлении, а не в определении. Кроме того, функции, объявленные как friend внутри класса, на самом деле являются свободными функциями в области имен, а не членами класса. Итак, ваши определения должны выглядеть так:

LongInt operator +(LongInt const& x, LongInt const& y) { /*...*/ }
LongInt operator *(LongInt const& x, LongInt const& y) { /*...*/ }

Для дальнейшего чтения прочитайте следующую страницу: C ++ FAQ: Друзья

0 голосов
/ 06 апреля 2011

Вы переопределяете оператора ... вы "вызываете" его, используя оператор:

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