【19软工一班】知乎:怎样完全掌握c++的面向对象部分?

用户头像
来自上海海洋大学-朱灿成发布于:2020-06-08 22:16:25

[不谈内容,单讲方法论吧]


C++中的 面相对象,狭义地讲就是和 “class” 这个词有关的东西(不含模板)。其实不用一次性掌握的,你可以一段一段来。

首先请学会使用最简单的 class:

  • 无继承
  • 无虚函数
  • 构造函数要么=default,要么写最简单的那种
  • 无析构
  • 无 copy/move 构造函数/赋值运算符
  • 无运算符重载
  • 无类型转换构造函数
  • 无友元
  • ...

对,就是这么一个类似于 C 中 struct 的 class,就可以开用了~

  • public/private 这两词你一定会用的
  • 构造函数只有一个参数时,记得用 explicit 修饰
  • 因为没有继承,所有对象之间一律用 “组合” 来连接
  • 学有余力可以去接触下 functor,用 “动态绑定” 来取代一部分 “组合”。毕竟,不管怎样,应用层面的 functor 还是要比 虚函数+继承 来得更直观,更易于理解的(就是写起来有点啰嗦......

以上这些,我相信现在的你就已经掌握了。

但是,请一定要去使用它们,实实在在地写进项目里

(任何迷你项目沙雕项目都行。而且最好是项目,不是算法题,算法题几乎关联不到 oop 的。项目会引导你遭遇 工程问题,而工程问题,才是OOP 的主战场!!!)

然后,在你用上一阵子后,你会开始觉得,有些地方怪怪的,隐约记得书上介绍过更高明的用法。有些地方太啰嗦,觉得索然无味,想要作点死。

这种时候就可以添砖加瓦了

此时的你已经知道自己想要什么,可以有针对性地去学。记得把新get的技能,及时应用到项目中。新旧两份方案,还可以拿来对比对比(毕竟,新学的不见的就是更好的)

这种 面相项目,面相工程问题 的学习法,其实就是在你脑中建立了一张 hash表:

<key=可以搞定的问题,val=知识点>

以后,每当你遇到类似的问题,你就会想起那串关联的知识点。甚至说,因为有了实际案例的支撑,这些知识点的形象变得更立体了。每次回忆时,第一时间想到的,将会是你曾经遇到的某次编程事件(一般都是惨烈的,刻骨铭心的事件,偶尔是梦幻的布灵布灵的)这要比单单一个 知识点描述 有血有肉的多~

这种以项目为主,学习为辅的模式,可以持续数年

本质上,它把知识点的 学习密度 给稀释了:

如果你觉得一天接触10个新知识,脑子要爆炸的话,那么一天一个,半周一个,这个强度总还是可以接受的吧。你有更充分的时间来查资料,做测试。填充其间的那些个 睡眠周期,也在默默地做着贡献:

(就我自己而言,有些想不明白的新东西,往往睡一觉后就想通了......)

最后,C++中的很多知识点都是“工具”向的。不是说 “越复杂越难”的工具 就越好。C++ 之所以把所有路子都提供给大家,就是希望大家能按照自己趁手的方式去用。"公牛还分 擅用左角 和 擅用右角 的呢"(海明威版权警告~)

说到使用习惯,就不得不提 “遗忘” 了。怎么说呢,“完全掌握” 是不可能 “完全掌握” 的。一个知识集,只要不用,过几个月还是会忘掉。

不如趁早接受现实,拥抱 “用到了立马翻书复习” 这个习惯。只要你查资料速度够快,复习速度够快,那么什么都是可以忘一忘的(也就不存在 “完全掌握” 这个要求了...强词夺理...)



来源:知乎

点赞 (11) 回复
1F 用户头像
来自上海海洋大学-汤磊发布于:2020-07-14 20:50:49

对学习c++有用

加载更多
点击图片
取消
回复
2F 用户头像
来自上海海洋大学-马海翔发布于:2020-07-14 21:14:58
加载更多
点击图片
取消
回复
3F 用户头像
来自上海海洋大学-王宇发布于:2020-07-14 21:17:05

加载更多
点击图片
取消
回复
4F 用户头像
来自上海海洋大学-戴干发布于:2020-07-14 21:51:09

加载更多
点击图片
取消
回复
5F 用户头像
来自上海海洋大学-张文博发布于:2020-07-14 22:22:24

加载更多
点击图片
取消
回复
6F 用户头像
来自上海海洋大学-赵敏佳发布于:2020-07-15 16:51:16

排版很好看

加载更多
点击图片
取消
回复
7F 用户头像
来自上海海洋大学-陈海露发布于:2020-07-15 18:05:45
整挺好
加载更多
点击图片
取消
回复
发布回复
点击图片