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

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

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

相关推荐
西阳未落3 分钟前
C++基础(21)——内存管理
开发语言·c++·面试
我的xiaodoujiao30 分钟前
Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium
开发语言·python·测试工具
callJJ33 分钟前
从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
java·开发语言·后端·spring·ioc·di
超级大福宝33 分钟前
使用 LLVM 16.0.4 编译 MiBench 中的 patricia遇到的 rpc 库问题
c语言·c++
wangjialelele35 分钟前
Linux中的线程
java·linux·jvm·c++
hsjkdhs2 小时前
万字详解C++之构造函数析构函数
开发语言·c++
Lin_Aries_04213 小时前
容器化简单的 Java 应用程序
java·linux·运维·开发语言·docker·容器·rpc
SELSL3 小时前
SQLite3的API调用实战例子
linux·数据库·c++·sqlite3·sqlite实战
什么半岛铁盒3 小时前
C++项目:仿muduo库高并发服务器-------Channel模块实现
linux·服务器·数据库·c++·mysql·ubuntu
techdashen3 小时前
12分钟讲解Python核心理念
开发语言·python