Đầu tiên là các hàm bạn bè bên ngoài (chức năng miễn phí)
friend bool operator== (MyClass &lhs, MyClass &rhs);
Thứ hai là hàm thành viên
bool MyClass::operator== (MyClass &rhs);
Bạn nên sử dụng biến thể thứ hai luôn thì bạn có thể
Bạn nên sử dụng biến thể đầu tiên trong trường hợp: 1) Đối số đầu tiên là lớp bên ngoài (thư viện)
friend ostream& operator<< (ostream &out, MyClass &m)
2) logic điều hành của không liên quan đến lớp học của bạn và phải được thực hiện riêng rẽ
friend bool operator(const MyClass& my, const std::string& string_form)
(vì lớp học của bạn không thể biết tất cả về các lớp học có thể cần trong so sánh điều hành)
Nguồn
2012-04-09 07:16:29
Bạn có thể tìm câu trả lời cho câu hỏi này và nhiều hơn nữa trong câu hỏi thường gặp về [toán tử quá tải] (http://stackoverflow.com/questions/4421706/operator-overloading) :) –
Câu hỏi thường gặp cho biết "Toán tử so sánh nhị phân nhị phân nên, theo các quy tắc của ngón tay cái, được thực hiện như các chức năng không phải thành viên "nhưng nó không biện minh cho lý do tại sao quy tắc này tồn tại - http://stackoverflow.com/questions/4421706/operator-overloading/4421719#4421719 – danio