Не предполагается ли явное определение функции друга вне класса?
Если да, то почему я могу объявить функцию друга внутри определения класса так же, как любую функцию-член?
Что это?
Это нормально с некоторыми операторами, такими как оператор <
или применим ли он ко всем операторам?
Если это применимо ко всем из них, есть ли недостатки для этого?
Следует ли его избегать? Если да, то почему?Почему возможно определить определения функций друга внутри определения класса?
class person
{
public:
bool operator<(int num)
{
return x < num ? true : false ;
}
bool operator<(person& p)
{
return x < p.x ? true : false ;
}
friend bool operator<(int num, person &p)
{
return p.x < num ? true : false ;
}
void setX(int num)
{
x = num;
}
private:
int x;
};
Update:
Я не прошу для выбора оператора, не являющийся член перегружать или оператор члена перегружать.
Что я хочу знать, так это то, что:
Почему нам разрешено перемещать определение методов друзей в нашем определении класса? ?.
Разве это не нарушение каких-либо вещей? Если это не так, почему у нас есть друзья на первом месте?
Мы могли бы просто определить перегрузки как функции-члены (я знаю ограничения функций-членов) Но я говорю, зная это, Почему не компилятор жалуется, что я не определил функцию друга вне определения класса, t должно быть внутри него (из-за его параметра класса) Итак, почему нам разрешено определять функцию друга внутри определения класса?
Если вы спрашиваете об определении функции 'friend', вы должны изменить заголовок своего вопроса, чтобы это отразить. – juanchopanza
Что мне тогда писать? – Breeze
Вы можете сделать это, потому что стандарт явно разрешает это. Что касается причины, по которой стандарт позволяет это, я предполагаю, что она считалась достаточно удобной, чтобы ее стоило. –