本书是C++程序设计的入门书籍,适合初学者使用。全书共11章,第1章主要介绍C++对C语言的扩充;第2~5章主要介绍C++的核心知识,包括类与对象、运算符重载、继承与派生、多态与虚函数;第6~7章主要介绍模板与STL;第8~9章主要介绍C++的I/O流和异常;第10章主要介绍C++11新特性;第11章带领读者开发一个综合项目——酒店管理系统,让读者将前面所学知识融会贯通,并了解实际项目的开发流程。
本书附有配套视频、源代码、题库、教学课件等资源,还提供在线答疑服务,希望帮助读者更好地学习书中的内容。
本书可作为高等教育本、专科院校计算机相关专业的教材,也可作为编程爱好者的参考读物。
1.黑马程序员经典教材改版。
2.本书内容做了大量更新,开发工具升级为最新的Visual Studio 2019,增加了两个综合案例,突出培养学生的动手能力。
3.本书附有配套视频、源代码、题库、教学课件等丰富的教学资源。
黑马程序员,传智播客旗下高端IT品牌,成立于2006年,由中国Java培训先行者张孝祥老师发起,联合全球最大的中文IT社区CSDN、中关村软件园共同创办的一家专业教育机构。办学至今,我们一直坚守着“为千万人少走弯路而著书,为中华软件之崛起而讲课”的办学理念,坚持培养优秀软件应用工程师的宏伟目标,在累计培养的十万余名学员中,其中90%的学员均已在北、上、广等一线城市高薪就业。为了迎合软件市场的需求,我们陆续开设了Java、网页平面、PHP、.Net、iOS、C/C++、Android等9个专业方向的课程,并且未来将逐渐开设其他专业方向的课程。随着传智播客的日益壮大,除了北京总部,我们在上海、广州、武汉、成都、深圳等地也创立了直营分支机构,传智播客俨然已成为了国内最具专业口碑的IT教育机构。
第 1章 初识C++ 1
1.1 C++简介 1
1.1.1 C++的发展史 1
1.1.2 C++的特点 2
1.2 第 一个C++程序的编写 2
1.3 C++对C语言的扩充 3
1.3.1 命名空间 3
1.3.2 控制台输入/输出 4
1.3.3 类型增强 5
1.3.4 默认参数 6
1.3.5 函数重载 7
1.3.6 引用 8
1.3.7 字符串类 10
1.3.8 new/delete 11
1.3.9 extern"C" 12
1.3.10 强制类型转换 13
1.4 本章小结 14
1.5 本章习题 15
第 2章 类与对象 16
2.1 面向对象程序设计思想 16
2.2 初识类和对象 17
2.2.1 类的定义 17
2.2.2 对象的创建与使用 18
2.3 封装 20
2.4 this指针 22
2.5 构造函数 22
2.5.1 自定义构造函数 23
2.5.2 重载构造函数 25
2.5.3 含有成员对象的类的构造函数 26
2.6 析构函数 28
2.7 拷贝构造函数 29
2.7.1 拷贝构造函数的定义 30
2.7.2 浅拷贝 31
2.7.3 深拷贝 33
2.8 关键字修饰类的成员 33
2.8.1 const修饰类的成员 33
2.8.2 static修饰类的成员 36
2.9 友元 38
2.9.1 友元函数 38
2.9.2 友元类 40
2.10 本章小结 42
2.11 本章习题 42
第3章 运算符重载 44
3.1 运算符重载概述 44
3.1.1 运算符重载的语法 44
3.1.2 运算符重载的规则 45
3.1.3 运算符重载的形式 46
3.2 常用的运算符重载 48
3.2.1 输入/输出运算符重载 48
3.2.2 关系运算符重载 49
3.2.3 赋值运算符重载 51
3.2.4 下标运算符重载 52
3.3 类型转换 54
3.3.1 类型转换函数 54
3.3.2 转换构造函数 55
3.4 仿函数——重载“()”运算符 56
3.5 智能指针——重载“*”和“->”
运算符 57
3.6 本章小结 60
3.7 本章习题 60
第4章 继承与派生 62
4.1 继承 62
4.1.1 继承的概念 62
4.1.2 继承方式 64
4.1.3 类型兼容 68
4.2 派生类 70
4.2.1 派生类的构造函数与析构函数 70
4.2.2 在派生类中隐藏基类成员
函数 73
4.3 多继承 74
4.3.1 多继承方式 74
4.3.2 多继承派生类的构造函数与
析构函数 75
4.3.3 多继承二义性问题 76
4.4 虚继承 79
4.5 本章小结 81
4.6 本章习题 81
第5章 多态与虚函数 83
5.1 多态概述 83
5.2 虚函数实现多态 83
5.2.1 虚函数 84
5.2.2 虚函数实现多态的机制 86
5.2.3 虚析构函数 87
5.3 纯虚函数和抽象类 89
【阶段案例】停车场管理系统 91
一、案例描述 91
二、案例分析 91
三、案例实现 93
5.4 本章小结 93
5.5 本章习题 93
第6章 模板 95
6.1 模板的概念 95
6.2 函数模板 96
6.2.1 函数模板的定义 96
6.2.2 函数模板实例化 97
6.2.3 函数模板重载 99
6.3 类模板 101
6.3.1 类模板定义与实例化 101
6.3.2 类模板的派生 102
6.3.3 类模板与友元函数 104
6.4 模板的参数 108
6.5 模板特化 110
6.6 本章小结 112
6.7 本章习题 112
第7章 STL 114
7.1 STL组成 114
7.2 序列容器 116
7.2.1 vector 116
7.2.2 array 121
7.2.3 list 122
7.2.4 forward_list 123
7.3 关联容器 124
7.3.1 set和multiset 125
7.3.2 map和multimap 128
7.4 容器适配器 131
7.4.1 stack 131
7.4.2 queue 132
7.4.3 priority_queue 133
7.5 迭代器 134
7.5.1 输入迭代器与输出迭代器 134
7.5.2 前向迭代器 135
7.5.3 双向迭代器与随机访问迭代器 135
7.6 算法 136
7.6.1 算法概述 136
7.6.2 常用的算法 136
【阶段案例】演讲比赛 138
一、案例描述 138
二、案例分析 139
三、案例实现 139
7.7 本章小结 140
7.8 本章习题 140
第8章 I/O流 142
8.1 I/O流类库 142
8.1.1 ios类库 142
8.1.2 streambuf类库 143
8.2 标准I/O流 143
8.2.1 预定义流对象 143
8.2.2 标准输出流 143
8.2.3 标准输入流 144
8.3 文件流 147
8.3.1 文件流对象的创建 147
8.3.2 文件的打开与关闭 148
8.3.3 文本文件的读写 149
8.3.4 二进制文件的读写 152
8.3.5 文件随机读写 154
8.4 字符串流 155
8.5 本章小结 158
8.6 本章习题 158
第9章 异常 160
9.1 异常处理方式 160
9.2 栈解旋 163
9.3 标准异常 164
9.4 静态断言 166
9.5 本章小结 167
9.6 本章习题 168
第 10章 C++11新特性 170
10.1 简洁的编程方式 170
10.1.1 关键字 170
10.1.2 基于范围的for循环 173
10.1.3 lambda表达式 173
10.2 智能指针 174
10.2.1 unique_ptr 175
10.2.2 shared_ptr 175
10.2.3 weak_ptr 177
10.3 提高编程效率 178
10.3.1 右值引用 178
10.3.2 移动构造 179
10.3.3 move()函数 181
10.3.4 完美转发 181
10.3.5 委托构造 183
10.3.6 继承构造 184
10.3.7 函数包装 186
10.4 并行编程 188
10.4.1 多线程 189
10.4.2 互斥锁 190
10.4.3 lock_guard和unique_lock 191
10.4.4 条件变量 193
10.4.5 原子类型 195
10.5 支持更多扩展 197
10.5.1 原生字符串 197
10.5.2 Unicode编码支持 198
10.5.3 新增的库 199
10.5.4 alignof和alignas 201
10.6 本章小结 202
10.7 本章习题 202
第 11章 综合项目—酒店管理系统 205
11.1 项目分析 205
11.1.1 功能描述 205
11.1.2 项目设计 206
11.2 项目实现 207
11.2.1 客房模块的实现 207
11.2.2 客房管理模块的实现 211
11.2.3 界面模块的实现 213
11.2.4 main()函数实现 216
11.3 效果显示 216
11.4 程序调试 218
11.4.1 设置断点 219
11.4.2 单步调试 220
11.4.3 观察变量 221
11.4.4 项目调试 223
11.5 项目心得 224
11.6 本章小结 224
附录I 格式控制标志位和操作符 225
附录II 标准异常类所属的头文件及其
含义 226