[不谈内容,单讲方法论吧]
C++中的 面相对象,狭义地讲就是和 “class” 这个词有关的东西(不含模板)。其实不用一次性掌握的,你可以一段一段来。
首先请学会使用最简单的 class:
- 无继承
- 无虚函数
- 构造函数要么=default,要么写最简单的那种
- 无析构
- 无 copy/move 构造函数/赋值运算符
- 无运算符重载
- 无类型转换构造函数
- 无友元
- ...
对,就是这么一个类似于 C 中 struct 的 class,就可以开用了~
- public/private 这两词你一定会用的
- 构造函数只有一个参数时,记得用 explicit 修饰
- 因为没有继承,所有对象之间一律用 “组合” 来连接
- 学有余力可以去接触下 functor,用 “动态绑定” 来取代一部分 “组合”。毕竟,不管怎样,应用层面的 functor 还是要比 虚函数+继承 来得更直观,更易于理解的(就是写起来有点啰嗦......
以上这些,我相信现在的你就已经掌握了。
但是,请一定要去使用它们,实实在在地写进项目里
(任何迷你项目沙雕项目都行。而且最好是项目,不是算法题,算法题几乎关联不到 oop 的。项目会引导你遭遇 工程问题,而工程问题,才是OOP 的主战场!!!)
然后,在你用上一阵子后,你会开始觉得,有些地方怪怪的,隐约记得书上介绍过更高明的用法。有些地方太啰嗦,觉得索然无味,想要作点死。
这种时候就可以添砖加瓦了
此时的你已经知道自己想要什么,可以有针对性地去学。记得把新get的技能,及时应用到项目中。新旧两份方案,还可以拿来对比对比(毕竟,新学的不见的就是更好的)
这种 面相项目,面相工程问题 的学习法,其实就是在你脑中建立了一张 hash表:
<key=可以搞定的问题,val=知识点>
以后,每当你遇到类似的问题,你就会想起那串关联的知识点。甚至说,因为有了实际案例的支撑,这些知识点的形象变得更立体了。每次回忆时,第一时间想到的,将会是你曾经遇到的某次编程事件(一般都是惨烈的,刻骨铭心的事件,偶尔是梦幻的布灵布灵的)这要比单单一个 知识点描述 有血有肉的多~
这种以项目为主,学习为辅的模式,可以持续数年
本质上,它把知识点的 学习密度 给稀释了:
如果你觉得一天接触10个新知识,脑子要爆炸的话,那么一天一个,半周一个,这个强度总还是可以接受的吧。你有更充分的时间来查资料,做测试。填充其间的那些个 睡眠周期,也在默默地做着贡献:
(就我自己而言,有些想不明白的新东西,往往睡一觉后就想通了......)
最后,C++中的很多知识点都是“工具”向的。不是说 “越复杂越难”的工具 就越好。C++ 之所以把所有路子都提供给大家,就是希望大家能按照自己趁手的方式去用。"公牛还分 擅用左角 和 擅用右角 的呢"(海明威版权警告~)
说到使用习惯,就不得不提 “遗忘” 了。怎么说呢,“完全掌握” 是不可能 “完全掌握” 的。一个知识集,只要不用,过几个月还是会忘掉。
不如趁早接受现实,拥抱 “用到了立马翻书复习” 这个习惯。只要你查资料速度够快,复习速度够快,那么什么都是可以忘一忘的(也就不存在 “完全掌握” 这个要求了...强词夺理...)
来源:知乎