朋友函数岂不应该显式地在类外定义吗?
如果是这样,那么为什么我可以像任何成员函数一样在类定义内声明朋友函数?
这是什么?
只适用于某些运算符(如 <
运算符),还是适用于所有运算符?
如果对所有运算符都适用,这样做有什么缺点吗?
应该避免使用吗?如果是,为什么?
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;
};
更新:我不是在问选择非成员运算符重载还是成员运算符重载。
我想知道的是:
为什么我们被允许将友元方法的定义移动到类定义内部?
这不是违反了任何东西吗?如果不是,那么我们为什么需要友元?
我们可以简单地将重载定义为成员函数(我知道成员函数的限制)。但是,我想问的是,为什么编译器不会抱怨我没有在类定义外定义友元函数,因为它不需要在其中(因为它有类参数)。 那么,为什么我们允许在类定义内部定义友元函数?