条款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.总结

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

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

相关推荐
mjhcsp7 分钟前
C++ KMP 算法:原理、实现与应用全解析
java·c++·算法·kmp
好大哥呀11 分钟前
C++ IDE
开发语言·c++·ide
WW_千谷山4_sch23 分钟前
MYOJ_10599:CSP初赛题单10:计算机网络
c++·计算机网络·算法
BHXDML24 分钟前
JVM 深度理解 —— 程序的底层运行逻辑
java·开发语言·jvm
Wang's Blog27 分钟前
Nodejs-HardCore: 深入解析DBF文件之二进制文件处理指南
开发语言·nodejs
hoiii18727 分钟前
基于LSB匹配的隐写术MATLAB实现程序
开发语言·matlab
J2虾虾34 分钟前
Java使用的可以使用的脚本执行引擎
java·开发语言·脚本执行
幻云201038 分钟前
Next.js指南:从入门到精通
开发语言·javascript·人工智能·python·架构
老马识途2.040 分钟前
java处理接口返回的json数据步骤 包括重试处理,异常抛出,日志打印,注意事项
java·开发语言
CCPC不拿奖不改名1 小时前
网络与API:从HTTP协议视角理解网络分层原理+面试习题
开发语言·网络·python·网络协议·学习·http·面试