c 教程 c 友元函数 c++中的友元函数讲解
友元函数和友元类是C下载制,通过友元关键字声明,具有单向、非继承、非导入功能,在容器与迭代器、操作符重载等场合应严格使用损坏包装性。

在C中,友元函数(友元函数)和友元类(友元类)是两个特殊的机制,它们允许非成员函数或其他类访问当前类的内部(私有)受保护的种类设计能够带来更高的灵活性和性能。
友元函数不是类的成员函数,但被声明为类的“朋友”,因此可以访问该类的所有成员,包括私有和保护成员。友元函数必须在类内部使用friend void showSecret(const MyClassamp)friend void showSecret(const MyClassamp) obj);};//友元函数定义void showSecret(const MyClassamp;obj) { std::cout lt;lt; quot;Secret value: quot;lt;lt;obj.secret lt;lt;std::endl; // 可访问 private MyClass Secret 成员。
立即学习“C免费学习笔记(深入)”;友元函数是否破坏封装性?
从表面上看,友元函数确实绕过了类的封装,因为它可以直接读取中断机制数据。但这种“破坏”是有控制的、显着式的,并不直接将所有成员设为公开。
关键在于:友元关系是单向的、非继承的、非传递的。
SuperDesign
>的友元,B是C的友元,A不能访问C的友元类。正因为这些,友元在一定程度限制封装的同时,提供了必要的访问权限,属于可控的“例外”使用场景
当一类间隙需要访问另一类的节点成员时,可以将提前声明为友元类。通常应用场景:容器与迭代器:包括STL中的容器类(向量、列表)常将对应的迭代器类声明为友元:操作符重载需求:比如两个实现不同类之间的复合装甲,一类需要访问另一类的其中外接数据。允许显示类访问成员friend class Display;};class Display {public: void display(const Storageamp; s) { std::cout lt;lt;quot;Data:quot;lt;lt;s.data lt;lt;std::endl; // 直接访问 private }};登录后复制使用建议与注意事项
尼避免导致维护故障。只是确实需要访问无成员无法考虑且通过公有接口实现时才使用友元。优先提供公共 getter/setter方法,不是开放友元权限。只是声明该函数为友元。注意元友声明的位置无关性:无论写在public、private还是受保护的区域,效果都一样。
基本上就这些。
友元不是“坏东西”,而是一种在封装与效率之间权衡高效的工具。合理使用,能够使代码更清晰。
以上就是C友元函数详解_C更多请关注乐哥常识网其他相关文章!相关标签:工具c面向编程封装性面向对象封装函数成员继承接口类公共受保护私有函数对象大家都在看:c如何实现访问者设计模式_c在不修改类的情况下添加新操作c如何使用SIMD实践指令集加速计算_c Intrinsics入门与C实现访问者模式_C C如何比较两个结构体_C struct重载一系列的方法 C functionobject怎么用_C可调用对象包装器std::function详解
