C++ operator== overloading
Possible Duplicate:
Operator overloading
以下重载operator==的方法有什么区别?
1 2 | // stroustrup way friend bool operator== (MyClass &lhs, MyClass &rhs); |
和
1 2 | // as taught in other places, including caltech bool MyClass::operator== (MyClass &rhs); |
哪条路更好?
1 2 | // stroustrup way friend bool operator== (MyClass &lhs, MyClass &rhs); |
参数应为
1 | friend bool operator==(const MyClass& lhs, const MyClass& rhs); |
当第一个参数可以隐式构造时,这是首选的方法。例如,如果
另外,隐式构造器有点危险——您希望仔细考虑使用它们的方便性和危险性。
最后一点:如果没有其他方法访问需要比较的数据,您只需要使非成员
首先是外部朋友功能(自由功能)
1 | friend bool operator== (MyClass &lhs, MyClass &rhs); |
二是成员函数
1 | bool MyClass::operator== (MyClass &rhs); |
您应该始终使用第二个变量,然后您可以
您应该使用第一个变量,以防:1)第一个参数是外部(库)类
1 | friend ostream& operator<< (ostream &out, MyClass &m) |
2)运算符逻辑与类无关,必须单独实现
1 | friend bool operator(const MyClass& my, const std::string& string_form) |
(因为您的类不能完全了解比较运算符中可能需要的类)
这是:
1 | friend bool operator== (MyClass &lhs, MyClass &rhs); |
是一个函数,用于比较两个对象。
这是:
1 | bool MyClass::operator== (MyClass &rhs); |
是成员函数。
您应该使用您的编码标准建议的那个,或者使用您喜欢的那个。没有比这更好的了。有些人(包括我自己)喜欢将比较运算符作为函数,另一些人则喜欢将它作为成员函数。
顺便说一下,参数应该是