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

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

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

相关推荐
白宇横流学长12 小时前
基于Java的火车票订票系统的设计与开发
java·开发语言
黎雁·泠崖12 小时前
Java核心基础API学习总结:从Object到包装类的核心知识体系
java·开发语言·学习
WarmSword12 小时前
mac上用cursor/vscode调试root权限进程
c++·ide·vscode·macos·mac
m0_7369191013 小时前
模板元编程性能分析
开发语言·c++·算法
Terio_my13 小时前
简要 Java 面试题学习
java·开发语言·学习
wbs_scy13 小时前
C++11:类新功能、lambda与包装器实战
开发语言·c++
永远睡不够的入13 小时前
类和对象(中)
c++
飞鹰5113 小时前
深度学习算子CUDA优化实战:从GEMM到Transformer—Week4学习总结
c++·人工智能·深度学习·学习·transformer
2301_7657031413 小时前
C++中的职责链模式实战
开发语言·c++·算法
StandbyTime13 小时前
《算法笔记》学习记录-第一章
c++·算法·算法笔记