原创作者: 王桂林
技术交流:QQ 329973169
C++ 基础与提高
你选择一门语言,让人看到你的样子,C++11 给时代一个新选择。
Author:王桂林
Mail
:
guilin_wang@163.com
原创作者: 王桂林
技术交流:QQ 329973169
版本信息:
版本
V1.0
V2.0
修订人
王桂林
王桂林
审阅人
时间
组织
2016.04.02
2016.12.01
广州小码哥教育科技有限公司
原创作者: 王桂林
技术交流:QQ 329973169
1. C++ is What?....................................................................................................................................1
1.1. Father of C++........................................................................................................................ 1
1.2. 历史背景.............................................................................................................................1
1.3. 应“运”而生,运为何?.................................................................................................1
1.4. 发展计事.............................................................................................................................1
1.4.1. 现代 C++...................................................................................................................1
1.4.2. 未来 C++...................................................................................................................2
1.5. 语言地位.............................................................................................................................2
1.6. why C++? 应用领域............................................................................................................ 3
1.6.1. 系统层软件开发......................................................................................................3
1.6.2. 服务器程序开发......................................................................................................3
1.6.3. 游戏网络分布式云计算......................................................................................... 3
1.6.4. 丰富的类库..............................................................................................................3
1.7. 开发环境.............................................................................................................................3
1.7.1. QT/VS.........................................................................................................................3
1.7.2. 下载地址..................................................................................................................4
1.8. 书藉推荐.............................................................................................................................4
2. C++’s Extension of C........................................................................................................................ 5
2.1. Type enhance 类型增强...................................................................................................... 5
2.1.1. 更严格的类型检查..................................................................................................5
2.1.2. 逻辑类型 bool......................................................................................................... 5
2.1.3. 真正的枚举..............................................................................................................6
2.1.4. 可被赋值的表达式..................................................................................................6
2.1.5. nullptr........................................................................................................................6
2.2. InputOutput 标准输入与输出............................................................................................ 7
2.2.1. cin 标准输入............................................................................................................7
2.2.2. cout 格式输出.......................................................................................................... 8
2.2.2.1. 进制输出.......................................................................................................8
2.2.2.2. 域宽/对齐/填充........................................................................................... 8
2.2.2.3. 设置浮点数精度.......................................................................................... 9
2.3. Func Overload 函数重载..................................................................................................... 9
2.3.1. 引例..........................................................................................................................9
2.3.2. Overload..................................................................................................................10
2.3.3. 重载规则................................................................................................................10
2.3.4. Match...................................................................................................................... 11
2.3.5. 匹配规则................................................................................................................11
2.3.6. 重载底层实现........................................................................................................12
2.3.7. extern “C”................................................................................................................12
2.4. Op Overload 运算符重载.................................................................................................. 13
2.5. Default Arg 默认参数........................................................................................................ 14
2.5.1. 引入默认参数........................................................................................................14
2.5.2. 默认参数的声明与顺序....................................................................................... 15
2.5.3. 默认规则................................................................................................................16
1
原创作者: 王桂林
技术交流:QQ 329973169
2.5.4. 规则冲突................................................................................................................16
2.6. Reference 引用...................................................................................................................16
2.6.1. 定义........................................................................................................................16
2.6.2. 规则........................................................................................................................16
2.6.3. 应用........................................................................................................................17
2.6.4. 提高........................................................................................................................18
2.6.4.1. 指针的引用-有,引用的指针-无..............................................................18
2.6.4.2. 指针的指针-有,引用的引用-无..............................................................19
2.6.4.3. 指针数组-有,引用数组-无......................................................................20
2.6.4.4. 数组的引用................................................................................................ 20
2.6.5. 常引用....................................................................................................................20
2.6.5.1. Const Sematic...............................................................................................20
2.6.5.2. 常引用的特性............................................................................................ 21
2.6.5.3. 临时对象的常引用.................................................................................... 21
2.6.5.4. Use const whatever possible....................................................................... 22
2.6.6. 引用本质................................................................................................................22
2.6.6.1. 大小.............................................................................................................22
2.6.6.2. 初始化.........................................................................................................23
2.6.6.3. 结论.............................................................................................................23
2.6.6.4. 反汇编对比指针与引用............................................................................ 23
2.7. new/delete 堆内存操作....................................................................................................25
2.7.1. new/new[]...............................................................................................................25
2.7.1.1. 单变量.........................................................................................................25
2.7.1.2. 数组.............................................................................................................25
2.7.2. delete/delete[]........................................................................................................ 26
2.7.2.1. 单变量.........................................................................................................26
2.7.2.2. 数组.............................................................................................................26
2.7.3. 返值判断................................................................................................................26
2.7.3.1. try catch........................................................................................................26
2.7.3.2. set_new_handler......................................................................................... 27
2.7.3.3. nothrow........................................................................................................27
2.7.4. 使用注意事项........................................................................................................28
2.7.5. whyNewDelete........................................................................................................28
2.7.6. 练习........................................................................................................................28
2.8. Inline 内联函数..................................................................................................................28
2.8.1. 引入........................................................................................................................28
2.8.2. 内联........................................................................................................................29
2.8.3. 评价........................................................................................................................29
2.9. Cast 类型强转....................................................................................................................29
2.9.1. C -> C++Style........................................................................................................... 29
2.9.2. static_cast................................................................................................................30
2.9.2.1. 语法.............................................................................................................30
2.9.2.2. 应用.............................................................................................................30
2.9.3. reinterpret_cast...................................................................................................... 30
2
原创作者: 王桂林
技术交流:QQ 329973169
2.9.3.1. 语法.............................................................................................................30
2.9.3.2. 应用.............................................................................................................30
2.9.4. const_cast................................................................................................................31
2.9.4.1. 语法.............................................................................................................31
2.9.4.2. 应用.............................................................................................................31
2.9.4.3. 脱去以后,还剩什么?.............................................................................. 32
2.9.4.4. 结论.............................................................................................................33
2.9.5. dynamic_cast...........................................................................................................33
2.10. Namespace 命名空间......................................................................................................33
2.10.1. why Namespace?.................................................................................................. 33
2.10.2. C 的命名空间....................................................................................................... 33
2.10.3. C++’Namespace.....................................................................................................34
2.10.4. 语法......................................................................................................................35
2.10.5. 应用......................................................................................................................35
2.10.6. std..........................................................................................................................37
2.10.7. 协同开发..............................................................................................................37
2.10.7.1. 同名空间.................................................................................................. 37
2.10.7.2. 协作方法.................................................................................................. 38
2.11. String 字符串类............................................................................................................... 39
2.11.1. 定义......................................................................................................................39
2.11.2. 初始化及基本操作............................................................................................. 39
2.11.3. 运算符重载函数................................................................................................. 40
2.11.4. 成员函数..............................................................................................................40
2.11.4.1. 分类...........................................................................................................40
2.11.4.2. 应用...........................................................................................................41
2.11.5. 数值与字符串互转函数..................................................................................... 41
2.11.5.1. value to string............................................................................................ 41
2.11.5.2. stirng to value............................................................................................ 41
2.11.6. string 数组.............................................................................................................42
2.12. Bjarne Stroustrup’s Advice...............................................................................................43
2.13. 练习.................................................................................................................................43
2.13.1. 格式时钟输出......................................................................................................43
2.13.2. 函数作默认参数................................................................................................. 43
2.13.3. string 数组.............................................................................................................44
3. Encapsulation................................................................................................................................ 45
3.1. C struct............................................................................................................................... 45
3.1.1. struct Date...............................................................................................................45
3.1.2. struct Stack..............................................................................................................46
3.2. One more step....................................................................................................................47
3.2.1. 数行合一................................................................................................................47
3.2.2. 症结所在................................................................................................................48
3.3. struct2class.........................................................................................................................49
3.3.1. 权限控制................................................................................................................49
3.3.2. 引进权限................................................................................................................49
3
原创作者: 王桂林
技术交流:QQ 329973169
3.3.3. class......................................................................................................................... 50
3.3.4. Memfuction Outof Class......................................................................................... 51
3.4. Test......................................................................................................................................52
3.4.1. 封装 struct Date 为 class Date............................................................................. 52
3.4.2. 实现单向链表的封装........................................................................................... 52
4. Class...............................................................................................................................................54
4.1. auto init.............................................................................................................................. 54
4.1.1. 自动初始化............................................................................................................54
4.1.2. 自定义栈大小........................................................................................................55
4.1.3. 自动销毁................................................................................................................56
4.2. Constructor.........................................................................................................................56
4.2.1. 构造器....................................................................................................................56
4.2.2. 语法........................................................................................................................57
4.2.3. 特性........................................................................................................................57
4.2.4. 自定义栈大小-重载.............................................................................................. 57
4.2.5. 自定义栈大小-默认参数...................................................................................... 58
4.2.6. 关于默认................................................................................................................60
4.2.7. initial list.................................................................................................................. 60
4.2.7.1. 初始化列表................................................................................................ 60
4.2.7.2. 列表的初始化顺序.................................................................................... 60
4.2.7.3. 结论.............................................................................................................61
4.3. Destructor...........................................................................................................................61
4.3.1. 析构器....................................................................................................................61
4.3.2. 语法........................................................................................................................61
4.3.3. 特性........................................................................................................................62
4.4. Con/De structor Theory..................................................................................................... 62
4.4.1. 引例........................................................................................................................62
4.4.2. Con/De.................................................................................................................... 62
4.4.3. Theory..................................................................................................................... 63
4.5. 多文件编程.......................................................................................................................63
4.6. Copy Constructor................................................................................................................63
4.6.1. 拷贝构造................................................................................................................63
4.6.2. 语法定义................................................................................................................64
4.6.3. 构造特性................................................................................................................64
4.6.4. 深拷贝与浅拷贝....................................................................................................64
4.6.4.1. class Date..................................................................................................... 64
4.6.4.2. class DataStr.................................................................................................64
4.7. this 指针.............................................................................................................................67
4.7.1. what is this?............................................................................................................ 67
4.7.2. 作用........................................................................................................................67
4.7.3. 特性........................................................................................................................68
4.8. operator=............................................................................................................................69
4.8.1. 赋值运算符重载....................................................................................................69
4.8.2. 语法........................................................................................................................69
4
原创作者: 王桂林
技术交流:QQ 329973169
4.8.3. 特性........................................................................................................................69
4.9. string2mystring...................................................................................................................70
4.9.1. mystring()................................................................................................................ 70
4.9.2. ~mystring().............................................................................................................. 70
4.9.3. mystring(const mystring & )....................................................................................70
4.9.4. mystring& operator=(const mystring &).................................................................70
4.9.5. mystring operator+/+=(const mystring & other)....................................................70
4.9.6. bool operator>/==(const mystring &)................................................................. 70
4.9.7. char& operator[](int idx).........................................................................................70
4.9.8. testing......................................................................................................................70
4.10. 栈对象返回的问题.........................................................................................................70
4.10.1. C 语言返回栈对象............................................................................................... 70
4.10.2. C++返回栈对象.................................................................................................... 70
4.10.2.1. 传值与传引用.......................................................................................... 71
4.10.2.2. RVO/NRVO................................................................................................. 71
4.10.2.3. 优化本质:.............................................................................................. 72
4.10.2.4. 接收栈对象.............................................................................................. 72
4.10.3. 返回栈上的引用................................................................................................. 72
4.10.4. 结论......................................................................................................................73
4.11. 对象数组.........................................................................................................................73
4.11.1. 引例......................................................................................................................73
4.11.2. 栈对象数组..........................................................................................................73
4.11.3. 堆对象数组..........................................................................................................73
4.11.4. 结论......................................................................................................................73
4.11.5. 二段式初始始化................................................................................................. 74
4.12. 练习.................................................................................................................................74
4.12.1. 下面的类对象生成有问题吗?......................................................................... 74
4.12.2. 按需求设计一个圆类......................................................................................... 74
4.12.3. 求两点间的距离................................................................................................. 74
4.12.4. 完成类 class Car.................................................................................................. 74
4.12.5. 实现钟表类 class Clock...................................................................................... 74
5. Class’ Extension............................................................................................................................. 75
5.1. class member storage........................................................................................................ 75
5.1.1. sizeof(class)............................................................................................................. 75
5.1.2. 类成员函数的可能存储方式............................................................................... 75
5.1.3. 类成员函数的实际存储方式............................................................................... 76
5.1.4. Beacuse Of this........................................................................................................76
5.1.5. 注意事项................................................................................................................77
5.2. const in class.......................................................................................................................77
5.2.1. const data member.................................................................................................77
5.2.2. const func member................................................................................................. 78
5.2.2.1. const 修饰函数的位置................................................................................78
5.2.2.2. const 成员函数的意义................................................................................78
5.2.2.3. const 构成重载............................................................................................78
5
原创作者: 王桂林
技术交流:QQ 329973169
5.2.2.4. 小结.............................................................................................................79
5.2.3. const object.............................................................................................................79
5.3. static in class.......................................................................................................................79
5.3.1. static data member................................................................................................. 80
5.3.1.1. 语法规则.................................................................................................... 80
5.3.1.2. Case 一塔湖图.............................................................................................81
5.3.1.3. 小结.............................................................................................................81
5.3.2. static func member................................................................................................. 82
5.3.2.1. 语法规则.................................................................................................... 82
5.3.2.2. 案例: 取号服务......................................................................................... 83
5.3.2.3. 小结.............................................................................................................84
5.3.3. Test.......................................................................................................................... 84
5.3.3.1. 单例模式.................................................................................................... 84
5.3.3.2. Render Tree..................................................................................................85
5.4. static const in class.............................................................................................................87
5.5. Pointer to class member.................................................................................................... 88
5.5.1. C pointer..................................................................................................................88
5.5.2. pointer to data member......................................................................................... 89
5.5.2.1. 语法.............................................................................................................89
5.5.2.2. 应用.............................................................................................................89
5.5.3. pointer to func member..........................................................................................90
5.5.3.1. 语法.............................................................................................................90
5.5.3.2. 应用.............................................................................................................90
5.5.4. Pointer?................................................................................................................... 91
5.5.5. Pointer to static member........................................................................................ 91
5.5.6. 提高:更加隐蔽的接口....................................................................................... 92
5.6. Test......................................................................................................................................93
5.6.1. 设计代理 Delegate 类........................................................................................... 93
6. Friend.............................................................................................................................................95
6.1. Why friend..........................................................................................................................95
6.1.1. get/set Method....................................................................................................... 95
6.1.2. why friend............................................................................................................... 95
6.2. Relationship........................................................................................................................96
6.2.1. 同类间无私处........................................................................................................96
6.2.2. 异类间有友元........................................................................................................96
6.2.3. 友元不是成员........................................................................................................97
6.3. Friend fucntion...................................................................................................................97
6.3.1. 全局函数作友元....................................................................................................97
6.3.2. 成员函数作友元....................................................................................................98
6.3.3. Forward Declaration................................................................................................99
6.4. Friend class.......................................................................................................................100
6.4.1. 原由......................................................................................................................100
6.4.2. 声明......................................................................................................................100
6.4.3. 应用......................................................................................................................100
6