回覆列表
  • 1 # 使用者7063786766555

    那就不要用友元函式。本來就有人認為完全不該用友元函式

    使用運算子過載,有的時候不適合直接宣告為成員函式。

    class point {

    private:

    int x;

    int y;

    public:

    point(int x,int y);

    };

    std::ostream& operator<<(std::ostream& os, const point& p);

    //過載流輸出運算子,運算子的左運算元必須是 std::ostream& 型別,不能直接宣告為成員函式

    //流輸出函式必須訪問point類的資料成員(包括private資料成員)

    //典型實現是 return os << p.x << " " << p.y;

    不過這也有別的解決方法,不是把 operator<< 宣告為友元函式,而是使用一個成員函式(類似於訪問者模式)

    class point {

    private:

    int x;

    int y;

    public:

    point(int x,int y);

    std::ostream& print_by(std::ostream& os);//成員函式print_by定義實際的輸出方式

    };

    //過載流輸出運算子,運算子的左運算元必須是 std::ostream& 型別,不能直接宣告為成員函式

    //不需要作為友元函式

    std::ostream& operator<<(std::ostream& os, const point& p){

    return p.print_by(os); //呼叫成員函式 print_by

    }

  • 中秋節和大豐收的關聯?
  • 失戀博物館裡面氣氛怎麼樣?