logo资料库

New C++基础与提高-王桂林 .pdf

第1页 / 共252页
第2页 / 共252页
第3页 / 共252页
第4页 / 共252页
第5页 / 共252页
第6页 / 共252页
第7页 / 共252页
第8页 / 共252页
资料共252页,剩余部分请下载后查看
C++ is What?
Father of C++
历史背景
应“运”而生,运为何?
发展计事
现代C++
未来C++
语言地位
why C++? 应用领域
系统层软件开发
服务器程序开发
游戏网络分布式云计算
丰富的类库
开发环境
QT/VS
下载地址
书藉推荐
C++’s Extension of C
Type enhance类型增强
更严格的类型检查
逻辑类型bool
真正的枚举
可被赋值的表达式
nullptr
InputOutput标准输入与输出
cin 标准输入
cout格式输出
进制输出
域宽/对齐/填充
设置浮点数精度
Func Overload函数重载
引例
Overload
重载规则
Match
匹配规则
重载底层实现
extern “C”
Op Overload运算符重载
Default Arg默认参数
引入默认参数
默认参数的声明与顺序
默认规则
规则冲突
Reference引用
定义
规则
应用
提高
指针的引用-有,引用的指针-无
指针的指针-有,引用的引用-无
指针数组-有,引用数组-无
数组的引用
常引用
Const Sematic
常引用的特性
临时对象的常引用
Use const whatever possible
引用本质
大小
初始化
结论
反汇编对比指针与引用
new/delete堆内存操作
new/new[]
单变量
数组
delete/delete[]
单变量
数组
返值判断
try catch
set_new_handler
nothrow
使用注意事项
whyNewDelete
练习
Inline内联函数
引入
内联
评价
Cast类型强转
C -> C++Style
static_cast
语法
应用
reinterpret_cast
语法
应用
const_cast
语法
应用
脱去以后,还剩什么?
结论
dynamic_cast
Namespace命名空间
why Namespace?
C的命名空间
C++’Namespace
语法
应用
std
协同开发
同名空间
协作方法
String字符串类
定义
初始化及基本操作
运算符重载函数
成员函数
分类
应用
数值与字符串互转函数
value to string
stirng to value
string数组
Bjarne Stroustrup’s Advice
练习
格式时钟输出
函数作默认参数
string数组
Encapsulation
C struct
struct Date
struct Stack
One more step
数行合一
症结所在
struct2class
权限控制
引进权限
class
Memfuction Outof Class
Test
封装struct Date 为class Date
实现单向链表的封装
Class
auto init
自动初始化
自定义栈大小
自动销毁
Constructor
构造器
语法
特性
自定义栈大小-重载
自定义栈大小-默认参数
关于默认
initial list
初始化列表
列表的初始化顺序
结论
Destructor
析构器
语法
特性
Con/De structor Theory
引例
Con/De
Theory
多文件编程
Copy Constructor
拷贝构造
语法定义
构造特性
深拷贝与浅拷贝
class Date
class DataStr
this指针
what is this?
作用
特性
operator=
赋值运算符重载
语法
特性
string2mystring
mystring()
~mystring()
mystring(const mystring & )
mystring& operator=(const mystring &)
mystring operator+/+=(const mystring & other)
bool operator>/
char& operator[](int idx)
testing
栈对象返回的问题
C语言返回栈对象
C++返回栈对象
传值与传引用
RVO/NRVO
优化本质:
接收栈对象
返回栈上的引用
结论
对象数组
引例
栈对象数组
堆对象数组
结论
二段式初始始化
练习
下面的类对象生成有问题吗?
按需求设计一个圆类
求两点间的距离
完成类class Car
实现钟表类 class Clock
Class’ Extension
class member storage
sizeof(class)
类成员函数的可能存储方式
类成员函数的实际存储方式
Beacuse Of this
注意事项
const in class
const data member
const func member
const修饰函数的位置
const成员函数的意义
const构成重载
小结
const object
static in class
static data member
语法规则
Case一塔湖图
小结
static func member
语法规则
案例: 取号服务
小结
Test
单例模式
Render Tree
static const in class
Pointer to class member
C pointer
pointer to data member
语法
应用
pointer to func member
语法
应用
Pointer?
Pointer to static member
提高:更加隐蔽的接口
Test
设计代理Delegate类
Friend
Why friend
get/set Method
why friend
Relationship
同类间无私处
异类间有友元
友元不是成员
Friend fucntion
全局函数作友元
成员函数作友元
Forward Declaration
Friend class
原由
声明
应用
Conclusion
声明位置
友元利弊
注意
Operator Overload
重载引入
语法格式
友元重载
成员重载
关于返值
重载规则
可被重载的操作符
不能新增运算符
不能改变操作数的个数
不改变语义
至少有一个操作数是自定义类
其它
重载范例
双目例举
格式
operator+=
operator-=
单目列举
格式
operator-
operator++()
operator++(int)
函数的宿命-成员?友元?
引例
结论
operator<>
语法格式
operator>>
operator<<
小结
重载格式
不可重载运算符
只能重载为成员的运算符
常规建议
User-Defined Type Cast
标准转换
隐式转化
强制转化
自定义类型-转化构造函数
语法
特性
实现
explicit keyword
自定义类型-操作符函数转化
语法
特性
实现
Test
分别用两种方法实现3D转2D。
实现如下功能
Advanced Topics
Functor
语法格式
例举
应用
Smart Pointer
RAII Theory
auto_ptr
myauto_ptr
operator->/*
operator new/delete
语法格式
全局重载
成员重载
Test
设计TDate类
设计矩阵Matrix类
自实现mystring中的流输入输出运算符重载
Inheritance
引入
why inherit?
引例
抽象
继承
重用
结论
继承
定义
is-a Not has-a
语法
继承方式
派生类的组成
图示组成
测试
派生类的构造
语法格式
构造顺序
图示
注解
测试
实战
层次设计感悟
派生类的拷贝构造
语法
构造顺序
图示
注解
测试
实战
派生类的赋值重载
语法
赋值顺序
图示
注解
测试
实战
派生类的友元函数
友元在派生类
实战
派生类析构函数
继承方式
类别
public
protected
private
派生类成员标识
图示
分类
作用域运算
Shadow
作用域运算符::
小结
why public?
继承方式
继承测试
结论
Qt库的使用
Multiple Inheritance
多继承意义
语法格式
继承语法
构造器格式
实战-沙发床
继承结构
沙发床实现
三角问题
钻石问题
钻石结构
钻石实现
虚基类-虚继承
语法小结
虚继承的意义
虚基类
虚继承
格式参考
改造沙发床
实现原理剖析
Polymorphism
What is Polymorphism?
生活中的多态
C++中的多态
Assign Compatible
赋值兼容规则
实现
转化安全
Conditions of PolyMorphism
静多态
多态
Virtual function
格式
实践
小结
Pure virtual function
格式
实践
小结
Virtual destructor
Case Analysis
Why virtual destructor
Override in Qt mouse event
Principle of design pattern
Entry of Cocos
跨平台设计原理
基于多态的游戏入口分析
Company Management
需求
详细设计
类设计
代码实现
RenderTree
RTTI
语义
typeid
基础类型应用
多态体系应用
小结
疑点E文
dynamic_cast
解析
测试
应用
多态实现原理剖析
虚函数表
一般继承(无虚函数覆写)
一般继承(有虚函数覆写)
静态代码发生了什么
评价多态
常见问答
练习
基类构造中的虚函数
基类析构中的虚函数
下面代码输入什么?
Template
Template Semantic
Func Template
重载泛化
函数模板
语法
案例
特性小结
原理
函数模板应用
函数模板的默认参数
Template Specialization 
适用场景
Class Template
Stack类
类模板
格式
应用
Stack类模板
类模板的友元
类内实现友元
类外实现友元
hpp
SelfTest
为T add(T a, T b) 实现char*的特化版本。
仿vector,自实现之myvetor
IO Stream
IO class
Hierarchy
类流特性
不可赋值和复制
缓冲
重载了<< >>
istream status
静态状态位
操作函数
实战
Cout
格式输出
成员函数
Cin
>>
get
声明
测试
小结
getline
声明
测试
小结
other
声明
测试
小结
if(!cin)/while(cin)
合法性
operator void*/!()
自测
File Stream
myfstream
fstream Test
myfstream
fstream
流对象的定义
流对象关联文件
关闭流对象
测试
文件读写
读写文件本文件
读写二进制文件
随机文件读写
综合练习
存取文件数据
Exception
Error
C Error
C resolve
C++resolve
Exception definition
语法格式
使用条例
测试
抛出异常声明
Stack Unwinding
unwinding
RAII in Exception
Standard Exception
异常类型自定义与抛出
标准异常
OOAD
UML
ATM project
C++11
Boost
Appendix
ASCII
Operator precedence
原创作者: 王桂林 技术交流: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>/
原创作者: 王桂林 技术交流: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
分享到:
收藏