那就不要用友元函式。本來就有人認為完全不該用友元函式
使用運算子過載,有的時候不適合直接宣告為成員函式。
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<< 宣告為友元函式,而是使用一個成員函式(類似於訪問者模式)
std::ostream& print_by(std::ostream& os);//成員函式print_by定義實際的輸出方式
//不需要作為友元函式
std::ostream& operator<<(std::ostream& os, const point& p){
return p.print_by(os); //呼叫成員函式 print_by
}
那就不要用友元函式。本來就有人認為完全不該用友元函式
使用運算子過載,有的時候不適合直接宣告為成員函式。
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
}