小象学院 C++学习笔记
C++学习笔记
第一版
吴文滔
2019 年 2 月 14 日(起)
1
小象学院 C++学习笔记
目录
C++学习笔记 .............................................................................. 1
目录...................................................................................... 2
第一章.................................................................................. 8
C++ 基础知识点 demo ...................................................... 8
C++结构体、指针、字符数、内存申请 .................. 9
C++自带的标准库类型 vector 的使用 .................... 10
C++不同命名空间内函数的调用方法 .................... 11
C++的输入输出输入输出的格式化 ........................ 16
C++中的基本内置类型 ............................................ 17
C++基本数据类型的转换 ........................................ 18
C++unsigned 类型注意事项 ..................................... 19
C++数据类型:声明与列表初始化 ........................ 20
C++数据类型:指针与引用的比较 ........................ 22
C++指针数组、数组指针与引用 ............................ 23
C++中的 const ........................................................... 24
C++const 限定符与引用、指针 ............................... 25
C++中的 struct .......................................................... 26
2
C++中的 class ............................................................ 27
C++中的字符串 ........................................................ 28
C++中的 vector.......................................................... 29
C++中的 auto ............................................................. 30
C++函数的重载:定义 ............................................ 31
C++重载的二义性与 const ....................................... 32
C++函数重载:运算符重载初步 ............................ 33
C++函数重载习题 .................................................... 34
C++内联函数 ............................................................ 36
C++内存四区 ............................................................ 37
C++new/delete 的基本应用 ...................................... 38
C++new 申请内存失败的处理 ................................. 39
C++动态创建二维数组,练习 ................................ 40
C++表达式计算顺序 ................................................ 41
C++左值右值 ............................................................ 43
C++显示转换 ............................................................ 44
C++中的参数传递 .................................................... 45
C++函数参数传递:const 形参和实参 ...................... 46
C++函数的返回类型 ................................................ 47
C++函数返回类型与 const ....................................... 48
小象学院 C++学习笔记
第二章................................................................................ 49
C++单例模式 ............................................................ 70
C++ 类和对象(封装) .................................................. 49
C++类类型的隐式转换 ............................................ 71
C++封装 .................................................................... 50
C++类类型传参 ........................................................ 72
C++访问控制 ............................................................ 51
C++类类型返回值 .................................................... 73
C++一个简单的栈类 ................................................ 52
第三章 ................................................................................ 74
C++类的构造函数与析构函数 ................................ 53
C++ 类和对象(构造深入) .......................................... 74
C++构造函数 ............................................................ 54
C++数据成员指针 .................................................... 75
C++析构函数 ............................................................ 55
C++成员函数指针 .................................................... 76
C++构造和析构:次序(1) .................................. 56
C++三/五法则 ........................................................... 80
C++构造和析构:次序(2) .................................. 57
C++引用计数 ............................................................ 81
C++类文件的编写 .................................................... 58
C++移动构造函数 .................................................... 82
C++中对象的内存 .................................................... 59
C++移动赋值运算符重载 ........................................ 86
C++类的 this 指针 ..................................................... 60
C++移动小结 ............................................................ 87
C++构造函数初始值列表 ........................................ 61
第四章 ................................................................................ 88
C++拷贝构造和赋值运算符重载 ............................ 62
C++ 类和对象(友元与运算符重载) .......................... 88
C++浅拷贝 ................................................................ 63
C++运算符重载规则 ................................................ 89
C++深拷贝实现 ........................................................ 64
C++输入输出运算符重载 ........................................ 91
C++友元函数 ............................................................ 65
C++一元运算符重载 ................................................ 92
C++类的 const 成员函数 .......................................... 68
C++二元运算符重载 ................................................ 93
C++类的静态变量和静态成员函数 ........................ 69
C++复合运算符+=重载 ............................................ 94
3
小象学院 C++学习笔记
C++前++和后++ ....................................................... 95
C++allocator............................................................. 118
C++下标运算符[] ...................................................... 96
C++小练习 .............................................................. 120
C++关系运算符== != <> ...................................... 97
第五章 .............................................................................. 121
C++类型转化运算符 ................................................ 98
C++ 类和对象(继承) ................................................ 121
C++类型转换二义性 ................................................ 99
C++继承:概念 ...................................................... 122
C++函数调用运算符 .............................................. 100
C++继承:成员的继承 .......................................... 123
C++函数对象 .......................................................... 101
C++继承:继承方式 .............................................. 124
C++lambda 表达式 .................................................. 102
C++继承:构造与析构 .......................................... 125
C++function ............................................................. 103
C++继承:拷贝构造与赋值运算符重载 .............. 129
C++bind ................................................................... 104
C++继承:移动构造与移动运算符重载 .............. 131
C++智能指针:引入 .............................................. 105
C++继承:赋值兼容 .............................................. 133
C++智能指针行为像指针 ...................................... 107
C++继承:静态类型和动态类型 .......................... 135
C++智能指针的引用计数 ...................................... 108
C++继承:类作用域和 shadow ............................. 136
C++shared_ptr ......................................................... 109
C++继承:名字查找 .............................................. 137
C++weak_ptr ........................................................... 110
C++继承:using 声明式 ......................................... 138
C++unique_ptr ......................................................... 111
C++继承:友元 ...................................................... 139
C++unique_ptr 简易实现 ........................................ 112
第六章 .............................................................................. 140
C++智能指针小结 .................................................. 113
C++ 类和对象(多态) ................................................ 140
C++operator new/delete ........................................... 114
C++多态引入 .......................................................... 141
C++运算符重载:new/delete ................................. 115
C++虚函数与多态 .................................................. 142
4
小象学院 C++学习笔记
C++动态绑定 .......................................................... 143
第七章 .............................................................................. 175
C++虚析构 .............................................................. 144
C++ 类和对象(多继承) ............................................ 175
C++纯虚函数和抽象基类 ...................................... 145
C++多继承:引入 .................................................. 176
C++多态例子:shape 面积 .................................... 146
C++多继承:构造与析构 ...................................... 177
C++多态例子:USB 设备 ...................................... 147
C++多继承:拷贝构造与赋值 .............................. 178
C++练习 1 ............................................................... 148
C++多继承:赋值兼容、类型转换 ...................... 179
C++练习 2 ............................................................... 149
C++多继承:名字查找和类作用域 ...................... 180
C++练习 3 ............................................................... 150
C++多继承:虚函数 .............................................. 181
C++public 继承:“is-a”关系 .................................. 151
C++多继承:虚函数表 .......................................... 182
C++面对对象设计原则:依赖倒置原则 .............. 153
C++虚继承:引入 .................................................. 183
C++虚函数表 .......................................................... 156
C++虚继承:构造与析构 ...................................... 184
C++运行时类型识别:RTTI ................................. 158
C++虚继承:对象内存分布 .................................. 185
C++例子:链表 ...................................................... 161
C++练习 .................................................................. 186
C++例子:shared_ptr 存入 vector ......................... 168
C++多继承、虚继承:小结 .................................. 187
C++构造函数中调用虚函数 .................................. 169
第八章 .............................................................................. 188
C++析构函数中调用虚函数 .................................. 170
C++ 类和对象(异常) ................................................ 188
C++成员函数中调用虚函数 .................................. 171
C++异常:C++中的错误处理 ............................... 189
C++虚函数的默认参数 .......................................... 172
C++异常:栈展开 .................................................. 190
C++不重新定义继承来的非虚函数 ...................... 173
C++异常:栈展开过程中对象被自动销毁 .......... 191
C++数据成员尽量 private ...................................... 174
C++异常:catch 匹配规则 ..................................... 192
5
小象学院 C++学习笔记
C++异常:重新抛出异常 ...................................... 193
C++函数模板的重载 .............................................. 219
C++异常:noexcept 异常说明 ............................... 194
C++继承关系的用法 .............................................. 220
C++异常:标准库异常类 ...................................... 195
C++静多态和动多态 .............................................. 221
C++异常:自定义异常类 ...................................... 197
C++Traits ................................................................. 222
C++异常:构造函数与异常 .................................. 199
C++参数推断、引用折叠 ...................................... 223
C++异常:异常安全 .............................................. 202
C++remove_refrance、std::move ............................ 224
C++异常:练习 ...................................................... 206
C++转发:std::forward ........................................... 225
C++异常:小结 ...................................................... 207
C++模板元编程(TMP) ............................................ 226
第九章.............................................................................. 208
第十章 .............................................................................. 227
C++ 类和对象(模板) ................................................ 208
C++ 类和对象(STL) ................................................. 227
C++模板:引入 ...................................................... 209
C++STL 概述 .......................................................... 228
C++函数模板:模板类型参数 .............................. 210
C++STL 组件 .......................................................... 229
C++函数模板:非类型模板参数 .......................... 211
C++STL 组件关系 .................................................. 230
C++函数模板:实例化 .......................................... 212
C++STL:容器 .......................................................... 231
C++类模板 .............................................................. 213
C++STL:迭代器 ...................................................... 232
C++类模板:static 成员、默认参数 ..................... 214
C++STL:vector1 ...................................................... 233
C++使用类的类型成员 .......................................... 215
C++STL:vector2 ...................................................... 234
C++成员函数模板 .................................................. 216
C++STL:array .......................................................... 235
C++控制实例化 ...................................................... 217
C++STL:deque ......................................................... 236
C++特例化 .............................................................. 218
C++STL:list ............................................................. 237
6
小象学院 C++学习笔记
C++STL:forward_list ............................................... 238
C++STL:无序容器(1) ........................................ 257
C++STL:容器适配器 stack ..................................... 239
C++STL:无序容器(2) ........................................ 258
C++STL:容器适配器 queue .................................... 240
C++STL:无序容器(3) ........................................ 259
C++STL:容器适配器 priority_queue ...................... 241
第十一章 .......................................................................... 260
C++STL:算法 find/find_if/count count_if ............. 242
C++ TO 流 ....................................................................... 260
C++STL:算法 for_each/fill/fill_n ........................... 244
C++C 语言文件操作 ............................................... 261
C++STL:算法 copy/copy_if/copy_n/transform ...... 245
C++MyFstream ........................................................ 262
C++STL:算法概述 .................................................. 246
C++IO 流结构 ......................................................... 263
C++STL:算法 排序 ................................................ 247
C++fstream(1) .......................................................... 264
C++STL:算法 二分搜索 ........................................ 248
C++fstream(2) .......................................................... 265
C++STL:算法 remove、unique ............................. 249
C++stringstream ....................................................... 266
C++STL:特定容器算法 .......................................... 250
C++缓冲区 .............................................................. 267
C++STL:练习 1 ....................................................... 251
C++练习:文本查询程序(1) ............................ 268
C++STL:关联容器 set/multiset(1) ......................... 252
C++练习:文本查询程序(2) ............................ 269
C++STL:关联容器 set/multiset(2) ......................... 253
C++练习:文本查询程序(3) ............................ 270
C++STL:关联容器 set/multiset(3) ......................... 254
C++练习:文本查询程序(4) ............................ 271
C++STL:关联容器 map/multimap ......................... 255
C++STL:练习 2 ....................................................... 256
7
小象学院 C++学习笔记
第一章
C++ 基础知识点 demo
8