当前位置:首页>维修大全>综合>

友元函数为什么不直接定义为类的成员函数呢 他俩感觉没什么区别呀(成员函数和友元函数的区别和联系)

友元函数为什么不直接定义为类的成员函数呢 他俩感觉没什么区别呀(成员函数和友元函数的区别和联系)

更新时间:2025-02-07 15:39:36

友元函数为什么不直接定义为类的成员函数呢 他俩感觉没什么区别呀

那就不要用友元函数。本来就有人认为完全不该用友元函数

使用运算符重载,有的时候不适合直接声明为成员函数。

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

}

更多栏目