|
46 | 46 |
|
47 | 47 | #fun[敢承诺:土木老哥也能看懂!]
|
48 | 48 |
|
49 |
| -= 指南 |
| 49 | += 前言 |
50 | 50 |
|
51 |
| -== 格式约定 |
| 51 | +推荐用手机或平板*竖屏*观看,可以在床或沙发上躺着。 |
| 52 | + |
| 53 | +用电脑看的话,可以按 `WIN + ←`,把本书的浏览器窗口放在屏幕左侧,右侧是你的 IDE。一边看一边自己动手做实验。 |
52 | 54 |
|
53 |
| -这是一段*示例文字* |
| 55 | +#image("pic/slide.jpg") |
| 56 | + |
| 57 | +#fun[请坐和放宽。] |
| 58 | + |
| 59 | +== 格式约定 |
54 | 60 |
|
55 | 61 | #tip[用这种颜色字体书写的内容是提示]
|
56 | 62 |
|
57 | 63 | #warn[用这种颜色字体书写的内容是警告]
|
58 | 64 |
|
59 | 65 | #fun[用这种颜色字体书写的内容是笑话或趣味寓言故事]
|
60 | 66 |
|
61 |
| -/ 术语名称: 这里是术语的定义 |
| 67 | +/ 术语名称: 这里是术语的定义。 |
62 | 68 |
|
63 | 69 | == 观前须知
|
64 | 70 |
|
65 | 71 | 与大多数现有教材不同的是,本课程将会采用“倒叙”的形式,从最新的 *C++23* 讲起!然后讲 C++20、C++17、C++14、C++11,慢慢讲到最原始的 C++98。
|
66 | 72 |
|
67 |
| -不用担心,越是现代的 C++,学起来反而更容易!反而是古代 C++ 又臭又长。 |
| 73 | +不用担心,越是现代的 C++,学起来反而更容易!反而古代 C++ 才*又臭又长*。 |
68 | 74 |
|
69 | 75 | 很多同学想当然地误以为 C++98 最简单,哼哧哼哧费老大劲从 C++98 开始学,才是错误的。
|
70 | 76 |
|
@@ -394,10 +400,12 @@ MSVC:`/Dmacro=value`
|
394 | 400 |
|
395 | 401 | 在 Linux 系统中,Clang 默认用的就是 libstdc++。需要为 Clang 指定 `-stdlib=libc++` 选项,才能使用。
|
396 | 402 |
|
397 |
| -#fun[牛头人笑话:“如果你不知道一个人是用的什么标准库,那么你可以猜他用的是 libstdc++。即使他的编译器是 Clang,他用的大概率依然是 libstdc++。”] |
| 403 | +#fun[牛头人笑话:“如果你不知道一个人是用的什么标准库,那么你可以猜他用的是 libstdc++。因为即使他的编译器是 Clang,他用的大概率依然是 libstdc++。”] |
398 | 404 |
|
399 | 405 | === 标准库的调试模式
|
400 | 406 |
|
| 407 | +TODO |
| 408 | + |
401 | 409 | = 你好,世界
|
402 | 410 |
|
403 | 411 | == 什么是函数
|
@@ -1047,7 +1055,7 @@ int main() {
|
1047 | 1055 | }
|
1048 | 1056 | ```
|
1049 | 1057 |
|
1050 |
| -#tip[这里声明为 auto 的参数 op,可以接受任意类型的对象传入(包括函数) |
| 1058 | +#tip[这里声明为 auto 的参数 op,可以接受任意类型的对象传入(包括函数)] |
1051 | 1059 |
|
1052 | 1060 | === 我用了 C++20 的函数参数 auto 语法糖
|
1053 | 1061 |
|
@@ -1191,15 +1199,15 @@ int main() {
|
1191 | 1199 |
|
1192 | 1200 | 通常来说,软件应当追求低耦合度,适度解耦的软件能更快适应需求变化。但过度的低耦合也会导致代码过于分散,不易阅读和修改,甚至可能起到反效果。
|
1193 | 1201 |
|
1194 |
| -若你解耦后,每次需求变化要改动的地方变少了,那就是合理的解耦。若你过分解耦,代码东一块西一块,以至于需求变化时需要到处改,比不解耦时浪费的时间还要多,那就是解耦过度。 |
| 1202 | +#tip[若你解耦后,每次需求变化要改动的地方变少了,那就是合理的解耦。若你过分解耦,代码东一块西一块,以至于需求变化时需要到处改,比不解耦时浪费的时间还要多,那就是解耦过度。] |
1195 | 1203 |
|
1196 |
| -#fun[完全零耦合的程序每个函数互不联系,就像把蚯蚓拆散成一个个独立的细胞一样。连初始需求“活着”都实现不了,谈何适应需求变化?所以解耦也切勿矫枉过正。] |
| 1204 | +#tip[完全零耦合的程序每个函数互不联系,就像把蚯蚓拆散成一个个独立的细胞一样。连初始需求“活着”都实现不了,谈何适应需求变化?所以解耦也切勿矫枉过正。] |
1197 | 1205 |
|
1198 |
| -为了避免解耦矫枉过正,人们又提出了内聚的概念,并规定解耦不得耽误内聚。 |
| 1206 | +为了避免解耦矫枉过正,人们又提出了内聚的概念,并规定解耦合理的前提是:不耽误内聚。 |
1199 | 1207 |
|
1200 | 1208 | / 内聚: 指的是同一个模块、类、函数内部各个元素之间的关联程度。内聚度越高,功能越独立,越易维护。
|
1201 | 1209 |
|
1202 |
| -#fun[例如,人体的心脏专门负责泵血,肝脏只负责解毒,这就是高内聚的人体器官。若人的心脏还要兼职解毒,肝脏还兼职泵血,看似好像是增加了“万一心脏坏掉”的冗余性,实际上把“泵血”这一功能拆散到各地,无法“集中力量泵大血”了。] |
| 1210 | +#fun[例如,人的心脏专门负责泵血,肝脏只负责解毒,这就是高内聚的人体器官。若人的心脏还要兼职解毒,肝脏还兼职泵血,看似好像是增加了“万一心脏坏掉”的冗余性,实际上把“泵血”这一功能拆散到各地,无法“集中力量泵大血”了。] |
1203 | 1211 |
|
1204 | 1212 | 好的软件要保持低耦合,同时高内聚。就像“民主集中制”一样,既要监督防止大权独揽滋生腐败,又要集中力量办一个人办不成的大事。
|
1205 | 1213 |
|
|
0 commit comments