有代码友元函数声明为成员函数
struct node
{
node(int X , int Y):X(X),Y(Y){};
int X;
int Y;
friend bool operator ==(const node &X, const node &Y);
};
int main()
{
node one(5,5);
node two(5,5);
if (one == two)
{
cout << " true " << endl;
}
return 0;
}
如果我声明的==操作符作为
bool node::operator ==(const node &X, constnode &Y)
{
return (X.X == X.Y && Y.X == Y.Y);
}
它需要一个参数,但是当我把它声明为
bool operator ==(const node &X, constnode &Y)
{
return (X.X == X.Y && Y.X == Y.Y);
}
它需要两个。我知道由语言定义,第一个定义需要一个参数,因为第二个是* this。
而第二个定义是它的运算符==(全局)的外部定义,它不绑定到任何结构,它不会传递* this在它中。
但是它还是定义为“朋友”这个基本说明(第一个定义)成员函数是它自己类的朋友函数。这怎么可能?为什么编译?
'布尔节点::运算符==(const的节点&X,常量节点&Y)'将需要3个参数(成员函数都隐含'this'参数)。 –
除了语言特定的问题,请注意您的布尔评估应该是'XX == YX && XY == YY' ** not **'XX == XY && YX == YY' –
其实不应该命名这样的参数首先是为了避免混淆。一种常见的做法是将它们命名为“lhs”(左侧)和“rhs”(右侧)。 – zett42