
那就不要用友元函数。本来就有人认为完全不该用友元函数
使用运算符重载,有的时候不适合直接声明为成员函数。
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
}