cpp_friend - ShenYj/ShenYj.github.io GitHub Wiki
- 友元包括友元函数和友元类
- 如果将函数A(非成员函数)声明为类C的友元函数,那么函数A就能直接访问类C对象的所有成员
- 如果将类A声明为类C的友元类,那么类A的所有成员函数都能直接访问类C对象的所有成员
- 友元破坏了面向对象的封装性,但在某些频繁访问成员变量的地方可以提高性能
class Point {
/// 将add 声明为友元函数, 就可以访问私有成员变量了
friend Point add1(Point, Point);
int m_x;
int m_y;
public:
int getX() { return m_x; }
int getY() { return m_y; }
Point(int x, int y) :m_x(x), m_y(y) {}
};
Point add1(Point p1, Point 2) {
return Point(p1.m_x + p2.m_x, p1.m_y + p2.m_y);
}
/// 非友元函数,无法访问私有成员变量
Point add2(Point p1, Point 2) {
return Point(p1.getX() + p2..getX(), p1..getY() + p2.getY());
}
设置友元类
class Point {
/// Math这个类是 Point类的友元类, Math类的成员都可以直接访问Point类的函数
friend class Math;
}
class Math {
}