在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的私有成员
}
};
|
- 过度使用会破坏封装性,导致代码维护困难
- 优先使用Getter/Setter维护封装性,仅在确有必要时(如运算符重载、跨类深度协作、单元测试)使用友元机制。