不应该在类之外显式定义友元函数吗?
如果是这样,为什么我可以像任何成员函数一样在类定义中声明友元函数?
这是什么 ?
是否只适用于某些运算符,例如<
运算符,还是适用于所有运算符?
如果它适用于所有这些,这样做有什么缺点吗?
应该避免吗?如果是,为什么?
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;
};
更新:
我不是要求选择非成员运算符重载或成员运算符重载。
我想知道的是:
为什么允许我们在类定义中移动友元方法的定义?.
不违反什么吗?如果不是,为什么我们首先会有朋友?
我们可以简单地将重载定义为成员函数(我知道成员函数的局限性)但我是说知道这一点,为什么编译器不抱怨我没有在类定义之外定义友元函数,因为它不需要在它里面(因为它有类参数) 那么为什么我们可以在类定义中定义一个友元函数呢?