条款23:宁以non-member、non-friend替换member函数

1.使用场景举例

网络浏览器类


当然这一功能也可以由一个non-menber函数(更好的封装,本条款的核心立意)提供:

面向对象守则要求数据应该尽可能的被封装,然而与直观相反地,member函数clearEverything带来的封装性比non-member函数低。如何认识封装?越多的东西被封装,我们改变那些东西的能力也就越大。所以,从这个角度讲,member函数增大了访问class内private成分的能力,导致较大封装性的是non-member、non-friend函数。friend函数与member函数对成员变量的访问能力相同,这里选择的关键并不是member函数与non-member函数,而是member函数与non-member、non-friend函数之间。

2.总结

面向对象的思想要求具备明确每个类的职能,设计类时要尽量体现封装性。

**举例:**设计一个机器人,基类的机器人应该有手、腿、脚、躯干等。机器人有一些行为,例如挥手、走路等,要基于基类的机器人进行拓展。而不是直接在基类机器人中直接定义这些行为。

相关推荐
死磕音视频5 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
WL学习笔记7 小时前
C & C++ 内存管理
c++·c++内存管理
顽疲7 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog8 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
宛 禾9 小时前
Qt 控件入门:QLabel 从拖拽到对象树,一篇讲透
c++·qt·学习
hetao17338379 小时前
联盟场-提高组-R7 & ZYZSC-S-Round 11
c++·算法
程序喵大人9 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
微三云 - 廖会灵 (私域系统开发)10 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
局部有解10 小时前
Hot100 - 三数之和
数据结构·c++·算法
学逆向的10 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全