
当一个函数或者类A的函数想要访问类B的私有/保护成员的话,需要把类B的成员放到公共区域中,这样会违背当初的意愿。友元可以使函数和类A直接访问类B的私有/保护成员。
友元的特征:
(1) 友元关系不能被继承,就像父亲的朋友未必是儿子的朋友。
(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
友元能够使得普通函数直接访问类的保护数据,避免了类成员函数的频繁调用,可以节约处理器开销,提高程序的效率,但所矛盾的是,即使是最大限度大保护,同样也破坏了类的封装特性,这即是友元的缺点,在现在cpu速度越来越快的今天我们并不推荐使用它,但它作为c++一个必要的知识点,一个完整的组成部分,我们还是需要讨论一下的。
可以将类A和普通函数作为类B的友元(注意友元是单向的),这个时候类A和函数PT()可以使用类B的私有/保护成员。
#include#include using namespace std; class building{ friend class goodgay; friend void goodbye(building *building1); public: building(){ sittingroom="keting"; bedroom="woshi"; } public: string sittingroom; private: string bedroom; }; class goodgay{ friend class building; public: goodgay(); void visit(); building *build3; }; goodgay::goodgay() { build3 =new building; } void goodgay::visit() { cout <<"goodgay访问"< bedroom< sittingroom< bedroom< 结果:
参考链接:https://blog.csdn.net/adriano119/article/details/5914443
参考链接:https://blog.csdn.net/qq_35644234/article/details/52823589
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)