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ư <, >, =
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?