友元类是通过friend关键字声明的能访问另一类私有和保护成员的类,如容器与迭代器间需紧密协作时使用。

在C++中,友元类(friend class)是一种特殊机制,允许一个类访问另一个类的私有(private)和保护(protected)成员。这种关系是单向的,且需要显式声明,不能被继承或传递。
什么是友元类
友元类是指在一个类中通过friend关键字声明的另一个类。被声明为友元的类可以访问当前类的所有成员,包括私有和保护成员。这打破了封装性,因此应谨慎使用,仅在确实需要紧密协作的类之间使用。
如何定义友元类
在类A中声明类B为友元,则类B的对象可以访问类A的私有数据。语法如下:
示例代码:
立即学习“C++免费学习笔记(深入)”;
private:
int secret;
public:
A(int s) : secret(s) {}
// 声明B为友元类
friend class B;
};
class B {
public:
void accessSecret(const A& obj) {
// 可以直接访问A的私有成员
std::cout }
};
在这个例子中,B 是 A 的友元类,所以 B::accessSecret() 能直接访问 A 对象的私有成员 secret。
友元类的应用场景
友元类常用于以下情况:
- 两个类高度耦合,如容器类与迭代器类
- 实现操作符重载时需要访问对方私有成员(如
- 设计紧密配合的设计模式,如观察者模式中的特定实现
注意:友元关系是单向的。如果A是B的友元,不代表B也是A的友元。若需双向访问,必须在两个类中分别声明。
注意事项与最佳实践
- 友元破坏了封装性,应尽量避免滥用
- 友元不具有传递性:A是B的友元,B是C的友元,A不能访问C的私有成员
- 友元不能被继承:基类的友元不能访问派生类的私有成员
- 建议只在必要时使用,并通过清晰注释说明原因
基本上就这些。友元类提供了一种可控的方式打破封装,关键在于合理使用,确保代码可维护性和安全性之间的平衡。











