【发布时间】:2013-07-04 22:54:09
【问题描述】:
难道不应该在类之外显式定义友元函数吗?
如果是这样,为什么我可以像任何成员函数一样在类定义中声明友元函数?
这是什么?
是只适用于<等一些运算符还是适用于所有运算符?
如果它适用于所有这些,这样做有什么缺点吗?
应该避免吗?如果是,为什么?
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;
};
更新:
我不是要求选择非成员运算符重载或成员运算符重载。
我想知道的是:
为什么允许我们在类定义中移动友元方法的定义?。
不违反什么吗?如果不是,为什么我们首先要有朋友?
我们可以简单地将重载定义为成员函数(我知道成员函数的局限性)但我是说知道这一点,为什么编译器不抱怨我没有在类定义之外定义友元函数,因为它不需要在里面(因为它有类参数)
那么为什么我们可以在类定义中定义友元函数呢?
【问题讨论】:
-
如果您询问
friend函数的定义,那么您应该更改问题的标题以反映这一点。 -
那我应该写什么呢?
-
您可以这样做,因为标准明确允许这样做。至于标准允许它的原因——我的猜测是它被认为足够方便,值得。
-
你可以问“为什么可以在类定义中放置友元函数定义?”
标签: c++ operator-overloading friend