【转】C++ friend存在的意义
来源:互联网 发布:交大知行 编辑:程序博客网 时间:2024/06/18 09:52
C++区看到网友讨论,其中说的比较清晰的是dingqiang107,特转过来
友元只对特定目标开放,而public对所有目标开放,两者作用不同,不可相互替代。你举的这个例子是不对的。只允许部分类或函数访问自己的私有成员,其它人不行,这件事非友元不能做。
友元并没有破坏封装。将何人设成友元,或者说允许谁来访问本类的私有成员,完全是由本类的作者决定的,如同将哪些成员设成公共成员一样。public控制开放哪些成员,friend控制开放的目标,是控制的两种表现形式,并不是对立的,所以从概念上讲并没有破坏封装。
所谓“封装”,并不是说把所有的东西都包起来不给别人看,而是指有控制的允许一些人看到一些东西,强调的是“控制”,而不是“隐藏”。有“隐藏”必有“开放”,否则就谈不上封装了,关键在于作者能不能控制这种开放。有的语言不能控制,就说它不具有“封装”特性,有的语言能够控制,就说它具有“封装”特性。
C++的“封装”特性是指其能够“控制开放”,友元只是细化这种控制,并没有失去控制,所以并没有破坏“封装”。类似还有protected,只允许特定目标访问特定成员,也是对“封装”的细化,都在类的作者的控制之下。
最初曾考虑过将friend进一步细化到控制单独的成员,也就是说同时控制开放成员与目标,不过语法上太别扭了,所以现在friend作用于所有成员,public作用于所有目标。
- 【转】C++ friend存在的意义
- 链表头结点存在的意义【转】
- 存在的意义
- 生命存在的意义
- 存在的意义
- "接口"存在的意义
- 容器存在的意义
- 数据结构存在的意义
- 函数库存在的意义。
- docker存在的意义
- 我们存在的意义
- 补码存在的意义
- 补码存在的意义
- 存在的意义
- 公司存在的意义
- [C#-1] C#中event的关键字存在的意义
- C语言中‘,’运算符存在的意义
- 神的“存在”的意义
- 【原】Java反射机制的原理及在Android下的简单应用
- 云计算概念
- arm-hismall-linux-strcip作用
- mac,ios相关的一些东西
- linux 重启网络服务
- 【转】C++ friend存在的意义
- 我对开源C++网络库简单应用总结
- HDU 3008(Warcraft)
- Cookie安全
- 下级向上级汇报工作时的礼仪要求
- 文件内容操作命令 cat、more、less、head、tail、wc、grep 命令详情
- sql效率
- 关于如何阅读主流文献和主流期刊
- 从jsp里显示服务器上某个配置文件的内容