大家好,我是兔飞飞女士!今天学习friend。
在C++中,friend关键字可以用来让一个类的外部函数或其他类访问这个类的私有成员(private/protected)。它就像“特殊通道”或“好朋友特权”,平时私有成员只有类自己和它的子类能访问,但friend可以破例。
用人话解释
-
让函数做朋友:
如果你写了一个类,想让某个普通函数能访问它的私有数据,就可以把这个函数声明为“朋友”:class MyClass { private: int secret = 42; // 私有成员,外面访问不了 public: friend void showSecret(const MyClass& obj); // 声明showSecret是朋友 }; void showSecret(const MyClass& obj) { std::cout << "Secret is: " << obj.secret << std::endl; // 可以访问 }朋友特权:
showSecret可以直接访问MyClass的私有成员secret。 -
让另一个类做朋友:
有时你需要两个类“特别亲密”,其中一个类可以直接访问另一个类的私有数据。这时你可以让一个类成为另一个类的朋友:class MyClass { private: int secret = 100; friend class FriendClass; // FriendClass是MyClass的朋友 }; class FriendClass { public: void show(const MyClass& obj) { std::cout << "MyClass secret is: " << obj.secret << std::endl; // 访问成功 } }; -
访问破例,不是继承:
friend只是允许朋友访问,不是继承关系,两个类之间还是独立的。- 朋友是单向的:如果
A是B的朋友,反过来B不一定是A的朋友。
-
友元和封装的关系:
friend破坏了封装,因为它绕过了私有和保护权限。- 但是,有些时候合理地使用
friend可以避免过于复杂的接口设计。比如:两个类确实需要紧密协作时。
什么时候用friend
- 需要一个函数操作类的内部细节,但不想把它做成类的成员函数(比如操作符重载)。
- 两个类紧密协作,共享数据或实现某些特殊逻辑。
总结
friend就像是“给特别信任的朋友开个后门”。它允许函数或类访问你的私有数据,但要谨慎使用,过多的朋友会让你的代码变得复杂和不安全。
1321

被折叠的 条评论
为什么被折叠?



