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 {

}
⚠️ **GitHub.com Fallback** ⚠️