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ư <, >, =

Ha Gia Phat viết 19:51 ngày 30/09/2018

à 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

Bài liên quan
0