lựa chọn thông minh nhất của bạn là để làm cho nó một chức năng bạn.
Như JaredPar đề cập, việc triển khai toàn cầu không thể truy cập các thành viên lớp học được bảo vệ và riêng tư, nhưng cũng có vấn đề với chức năng thành viên.
C++ sẽ cho phép chuyển đổi ngầm định các thông số chức năng, nhưng không cho phép chuyển đổi ẩn của this
.
Nếu loại tồn tại mà có thể được chuyển đổi sang lớp X của bạn:
class Y
{
public:
operator X(); // Y objects may be converted to X
};
X x1, x2;
Y y1, y2;
Chỉ một số các biểu thức sau đây sẽ biên dịch với một hàm thành viên.
x1 == x2; // Compiles with both implementations
x1 == y1; // Compiles with both implementations
y1 == x1; // ERROR! Member function can't convert this to type X
y1 == y2; // ERROR! Member function can't convert this to type X
Các giải pháp, để có được sản phẩm tốt nhất của cả hai thế giới, là để thực hiện điều này như một người bạn:
class X
{
int value;
public:
friend bool operator==(X& left, X& right)
{
return left.value == right.value;
};
};
Nguồn
2009-07-17 20:53:24
Đó là thực hành tốt để khai báo đối số không chỉ tham khảo, nhưng cũng const, bất cứ khi nào bạn chắc chắn bạn có thể. Các toán tử so sánh có thể là const và lấy tham chiếu const cho chắc chắn. (Nếu không có gì khác, nó hứa với trình biên dịch cho phép nó tối ưu hơn.) –