如果你重载二元运算符作为成员函数,那么它应该只需要一个论据。第一个操作数是操作员被调用的对象(即*this
);第二个操作数是单个函数参数。
struct names {
//...
// better to pass by reference;
// make the function 'const' so it can be used on constant objects
bool operator==(names const & rhs) const {
return this->fname == rhs.lname;
}
};
或者,可以过载它作为一个非成员函数,使用两个参数:
bool operator==(names const & lhs, names const & rhs) {
return lhs.fname == rhs.lname;
}
如果需要访问私有成员(不是在该示例的情况下),那么它必须是一个朋友。您可以在类定义中定义好友;在这种情况下,代码看起来与您的示例完全相同,仅在函数声明前面有friend
。
(当然,这不是平等的合理定义,因为它不是对称的,许多算法将打破,如果你能有a == b
但不b==a
,你可以用这个定义。lhs.fname == rhs.fname && lhs.lname == rhs.lname
会更有意义。)
你正在做重载作为非静态成员函数,所以它已经有了一个隐含的对象参数。 – 2014-09-11 07:32:47
使其成为非会员。 – juanchopanza 2014-09-11 07:33:09
最好不要以价值观来论证它的论点。 – 2014-09-11 07:34:11