30/09/2018, 17:39
[C++ overload operator] Tại sao phải dùng friend hoặc kiểu này (chi tiết trong post)?
Chào các bạn mình mới học C++ và đến khi overloading operator mình có gặp cái vụ này:
Khi overload operator<< hoặc >> (mấy cái stream) thì phải dùng từ khóa friend hoặc dùng kiểu này mới được:
class T {
public:
void stream_to(std::ostream&) {os << obj.data_;}
private:
int data_;
};
inline std::ostream& operator<<(std::ostream& os, const T& obj)
{
obj.stream_to(os);
return os;
}
Vậy tại sao lại phải có friend? Nếu ko khai báo friend function thì khi ra ngoài class nó sẽ báo là ko có operator<< thuộc member của class. Tại mình tưởng cái “mẫu” nó giống với khi overload mấy cái toán tử khác như <, >, =
Bài liên quan
à là do hàm trả về object stream, mình ko có access vào nó nên ko thể modify nó được, phải khai báo hàm dưới dạng external so với class