C++学习笔记-friend(友元)

在C++中,友元(friend) 是一种打破类封装特性的特殊机制,允许外部函数或类访问类的私有(private)和保护(protected)成员。

友元函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class Box {
private:
    int width;
public:
    friend void printWidth(Box box);  // 声明友元函数
};

// 定义友元函数(无需作用域限定)
void printWidth(Box box) {
    cout << box.width;  // 直接访问私有成员
}

友元类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Storage {
private:
    int secret;
    friend class Display;  // 声明友元类
};

class Display {
public:
    void showSecret(Storage s) {
        cout << s.secret;  // 访问Storage的私有成员
    }
};

友元成员函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class A {
private:
    int x;
    friend void B::accessA(A& a);  // 仅允许B类的特定成员函数访问
};

class B {
public:
    void accessA(A& a) {
        cout << a.x;  // 访问A的私有成员
    }
};

总结

  1. 过度使用会破坏封装性,导致代码维护困难
  2. 优先使用Getter/Setter维护封装性,仅在确有必要时(如运算符重载、跨类深度协作、单元测试)使用友元机制。
updatedupdated2025-03-132025-03-13