从零开始学C++

2010年出版的图书
《从零开始学C++》是2010年12月出版的图书，作者是古超、赵丹  等。本书循序渐进地讲解如何使用C++开发环境，采用理论与实践相结合的写作方法，不仅使读者对C++的语法有全面的了解，而且能让读者从实践中得到清晰的思路。
内容简介
本书全面地讲述了C++语言中的各个知识点，共包括四篇，内容包括C++概述、C++开发利器大集合、C++初次编程、C++的数据类型、运算符和表达式、分解C++——语句、数组的使用、灵活的指针、函数的使用、变量的生存范围、让数据到文本中去——文件的操作、预编译、字符串的处理、类和对象、财富的积累——继承、让程序变得更短——模板、代码的工厂——虚拟和多态、让系统变得更健康——异常处理等内容。在本书的每一章中都对相应的知识进行了串烧，有利于学习者系统地复习所学知识。
本书配有DVD光盘1张，内容为本书的实例文件和作者专门为本书录制的全程多媒体语音教学视频。
本书不仅适合C++语言的初学者，还适合C++语言编程爱好者和有志于使用C++语言进行编程的程序员作为参考和学习用书使用。
前 言
如果没有学习C语言，那就直接从C++开始吧！
——Bjarne Stroustrup（C++之父）
C/C++语言仍旧是使用范围最多的计算机编程语言，使用C/C++语言开发出来的软件遍及到生活中的各个领域，且具有较高的性能和稳定性。相比较其他语言而言，其优势更加明显，例如，同样在Windows操作环境下，同时打开使用C++开发的软件和使用Java开发的软件，前者的启动速度明显高于后者。
在刚开始学习C++语言的时候，有些学习者很难找到一本合适的入门书籍，学习过程中充满着迷惑，往往不知道该怎么入手。本书在编写过程中充分考虑了这种情况，使读者在掌握理论知识的同时，实际的编程能力也会得到很大提高，本书的每个例子都进行了详细解释，并在程序后面附上了运行结果，真正实现了理论与实际相结合的学习方法。
本书的特点
C++语言的流行，使越来越多的人加入到C++学习的大军中，但是在实际的学习过程中很难找到一本真正适合C++初学者的教材，因此，市场上急需一本能够真正为初学者提供的参考书，从而适合各种类型的人员进行C++的学习。作者在经过了深思熟虑之后，结合实际的情况对书本进行了编排，其特点如下：
从零开始，即使是没有任何编程基础的各层次人员都可以进行流畅的学习。
内容翔实，基本覆盖了C++程序语言的各个知识点，为学习者以后的深入学习奠定了基础。
结合实际，从基本出发，对每一个程序都进行了实际的编程运行，保证了程序的正确性和可读性。
语言通俗易懂，使枯燥的理论学习更加易于接受。
知识点介绍 准确、清晰是其显著特点，一般放在每一节开始位置，让零基础的读者了解相关概念，顺利入门。
实例 书中出现的完整实例，以章节顺序编号，便于检索和循序渐进地学习、实践，放在每节知识点介绍之后。
实例代码 与实例编号对应，层次清楚、语句简洁、注释丰富，体现了代码优美的原则，有利于读者养成良好的代码编写习惯。对于大段程序，均在每行代码前设定编号便于学习。
运行结果 对实例给出运行结果和对应图示，帮助读者更直观地理解实例代码。
习题 每章最后提供专门的测试习题，供读者检验所学知识是否牢固掌握。
贴心的提示 为了便于读者阅读，全书还穿插着一些技巧、提示等小贴士，体例约定如下：
提示：通常是一些贴心的提醒，让读者加深印象或提供建议，或者解决问题的方法。
注意：提出学习过程中需要特别注意的一些知识点和内容，或者相关信息。
警告：对操作不当或理解偏差将会造成的灾难性后果做警示，以加深读者印象。
经作者多年的培训和授课证明，以上讲解方式是最适合初学者学习的方式，读者按照这种方式，会非常轻松、顺利地掌握本书知识。
2．实用超值的DVD光盘
为了帮助读者比较直观地学习，本书附赠DVD光盘，内容包括多媒体视频、电子教案（PPT）和实例源代码等。
 多媒体视频
配有长达18小时手把手教学视频，讲解关键知识点界面操作和书中的一些综合练习题。作者亲自配音、演示，手把手教会读者使用。
 电子教案（PPT）
本书可以作为高校相关课程的教材或课外辅导书，所以笔者特别为本书制作了电子教案（PPT），以方便老师教学使用。
3．提供完善的技术支持
本书提供了论坛，读者可以在上面提问交流。另外，论坛上还有一些小的教程、视频动画和各种技术文章，可帮助读者提高开发水平。
4．丰富的额外素材下载
相关的开发素材文件。
适合阅读本书的读者
想从事编程，且对C++有兴趣的人
各大中专院校的在校学生和相关授课老师
了解C++，但还需要进一步学习的人
其他编程爱好者
本书作者
本书主要由古超和沈阳市电子技术学校的赵丹编写。其他参与本书编写的人员有昊燃、刘永纯、曾光、张双、朱照华、黄永湛、孟祥嵩、张贺军、李勇、关涛、王岩、李晓白、魏星，在此一并表示感谢！
目 录
第1篇 C++入门
第1章 C++概述（ 教学视频：49分钟） 15
1.1 C++与C 15
1.1.1 C语言 15
1.1.2 C++ 17
1.1.3 C和C++比较 17
1.2 程序和算法 19
1.2.1 程序 19
1.2.2 算法 19
1.3 程序设计方法 21
1.3.1 面向过程的程序设计 21
1.3.2 面向对象的程序设计 22
1.4 C++编程风格 24
1.5 C++编程的过程 25
1.6 本章小结 25
1.7 习题 26
第2章 C++开发利器大集合（ 教学视频：31分钟） 27
2.1VisualC++与集成开发环境 27
2.1.1 Visual C++概述 27
2.1.2 Visual C++ 6.0集成开发环境介绍 27
2.1.3 设置个性化的开发环境 32
2.1.4 创建一个简单的程序 33
2.2 C++ Builder 34
2.2.1 C++ Builder IDE（集成开发环境）简介 34
2.2.2 创建一个简单的程序 35
2.3 Linux/UNIX下的C++开发工具 35
2.4 本章小结 36
2.5 习题 36
第3章 C++初次编程（ 教学视频：39分钟） 37
3.1 初识输入与输出 37
3.2 注释符 38
3.3 控制语句简介 39
3.3.1 if语句 39
3.3.2 for语句 40
3.3.3 while语句 41
3.4 类 42
3.4.1 创建一个简单的类 42
3.4.2 初识成员函数 43
3.5 一个简单的C++程序 45
3.6 本章小结 47
3.7 习题 47
第2篇 C++的利器
第4章 C++的数据类型（ 教学视频：120分钟） 48
4.1 基本内置类型 48
4.1.1 整型 48
4.1.2 浮点型 50
4.2 常量 51
4.2.1 整数类型字面值常量 51
4.2.2 布尔型和字符型字面值常量 51
4.2.3 浮点型字面值常量 51
4.2.4 字符串字面值常量 51
4.3 变量 52
4.3.1 什么是变量 52
4.3.2 变量名的确定 53
4.3.3 变量的声明与定义 53
4.3.4 初始化变量 53
4.4 枚举类型 54
4.5 自定义类型typedef 55
4.6 引用 55
4.7 const限定符 56
4.8 类类型 57
4.9 标准库类型 58
4.9.1 string类型 58
4.9.2 顺序容器类型 60
4.9.3 关联容器类型 62
4.10 标准I/O库类型 64
4.10.1 输入输出流 64
4.10.2 字符串流 65
4.11 本章小结 66
4.12 习题 66
第5章 运算符和表达式（ 教学视频：64分钟） 67
5.1算术运算符与算术表达式 67
5.1.1 算术运算符 67
5.1.2算术表达式68
5.2关系运算符与关系表达式69
5.2.1 关系运算符 69
5.2.2 关系表达式 70
5.3逻辑运算符与逻辑表达式 70
5.3.1 逻辑运算符 70
5.3.2逻辑表达式71
5.4赋值运算符与赋值表达式 72
5.4.1赋值运算符72
5.4.2 赋值表达式 73
5.5条件运算符与条件表达式 74
5.6逗号运算符与逗号表达式 74
5.7 自增和自减运算符及其表达式 75
5.8 sizeof运算符 76
5.9 箭头运算符与点运算符 77
5.10 位运算符及其表达式 78
5.11 new和delete表达式 79
5.12 复合表达式 80
5.13 本章小结 82
5.14 习题 82
第6章 分解C++——语句（ 教学视频：63分钟） 83
6.1 简单语句 83
6.2 声明语句 84
6.3 复合语句 85
6.4 语句的作用域 86
6.5 分支语句 86
6.5.1 条件语句 86
6.5.2 switch语句 91
6.6 循环语句 93
6.6.1 for语句 93
6.6.2 while语句 95
6.6.3 do…while语句 96
6.6.4 嵌套循环语句 97
6.6.5break语句98
6.6.6 continue语句 100
6.6.7goto语句100
6.6.8 return语句 101
6.7 综合应用 102
6.8 本章小结 108
6.9 习题 108
第7章 数组的使用（ 教学视频：36分钟） 109
7.1 数组的概念 109
7.2 一维数组 109
7.2.1 一维数组的定义 109
7.2.2 一维数组的初始化 110
7.2.3 一维数组元素的访问 112
7.2.4 字符数组 112
7.3 多维数组 113
7.3.1 多维数组的定义 114
7.3.2 多维数组的初始化 114
7.3.3 多维数组元素的访问 116
7.4 数组的应用 117
7.5 本章小结 125
7.6 习题 125
第8章 灵活的指针（ 教学视频：79分钟） 126
8.1 什么是指针 126
8.2 指针的定义和初始化 128
8.2.1 指针变量的定义 128
8.2.2 获得地址并对指针变量进行初始化 129
8.2.3 指针变量的使用 130
8.2.4 指针与引用 132
8.3 指针的操作 133
8.4 指向指针的指针 135
8.5 使用指针访问数组元素 136
8.5.1 指向数组元素的指针 136
8.5.2 一维数组与指针 137
8.5.3 多维数组与指针 140
8.6 指针和const限定符 144
8.6.1 指向const对象的指针 144
8.6.2const指针145
8.7 指针和字符串 145
8.8 本章小结 146
8.9 习题 146
第9章 函数的使用（ 教学视频：81分钟） 147
9.1 函数的概念 147
9.2 函数的声明 148
9.3 函数的定义 150
9.3.1 不同函数类型的定义形式 150
9.3.2 函数的返回值 152
9.3.3 函数的形参表 153
9.4 函数的参数传递 154
9.4.1 形式参数与实际参数 154
9.4.2 非引用形参 155
9.4.3 引用形参 155
9.5 函数的调用 158
9.6 函数的嵌套调用 158
9.7 内联函数 159
9.8 变量的存储方式 161
9.9 指针和函数 161
9.9.1 指针参数 161
9.9.2 指针作为返回值 162
9.10 函数的重载 164
9.10.1 重载与作用域 165
9.10.2 默认参数 166
9.10.3 参数类型上不同的重载函数 166
9.10.4 参数个数上不同的重载函数 167
9.11 本章小结 168
9.12 习题 168
第10章 变量的生存范围（ 教学视频：26分钟） 169
10.1 局部作用域 169
10.2 全局作用域 170
10.3 变量的存储类型 171
10.3.1 自动存储类型 171
10.3.2 静态存储变量 171
10.3.3 寄存器存储类型 172
10.4 定义和使用命名空间 173
10.5 本章小结 176
10.6 习题 176
第11章 让数据到文本中去——文件的操作（ 教学视频：42分钟） 177
11.1 文件的概述 177
11.2 I/O流的描述 177
11.3 文件的打开模式 178
11.4 打开一个文件 178
11.5 向文件中写入数据 181
11.5.1 文本文件的写入方法 181
11.5.2 二进制文件的写入方法 182
11.5.3 将结构体数据写入到文件 182
11.6 从文件中读出数据 183
11.6.1 get()方法 183
11.6.2 getline()方法 183
11.6.3 rdbuf()方法 184
11.6.4 read()方法 184
11.7 文件指针的定位 185
11.7.1 确定文件指针在文件流中的位置（tellp()和tellg()） 185
11.7.2 移动文件流中指针（seekg()和seekp()） 187
11.8 关闭文件 188
11.9 文件处理的实例 189
11.10 本章小结 192
11.11 习题 192
第12章 预编译（ 教学视频：28分钟） 193
12.1 宏定义 193
12.1.1 不带参数的宏定义 193
12.1.2 带参数的宏定义 194
12.2 #include文件包含 196
12.3 条件编译 196
12.3.1 什么是条件编译 196
12.3.2 几种常用的条件编译格式 197
12.4 预定义宏 199
12.5 本章小结 200
12.6 习题 200
第13章 字符串的处理（ 教学视频：44分钟） 201
13.1 string对象的定义和初始化 201
13.2 字符串类的成员函数 202
13.3 字符串处理类的操作符 204
13.4 字符串类中的指针 206
13.5 string类串和C风格串之间的转换 207
13.6 字符串应用实例 208
13.7 本章小结 212
13.8 习题 212
第3篇 C++高级特性
第14章 类和对象（ 教学视频：78分钟） 213
14.1 类 213
14.1.1 类的定义 213
14.1.2 类的struct定义方式 216
14.2 定义一个类的实例——对象 217
14.3 类的构造函数 217
14.3.1 构造函数的定义 217
14.3.2默认构造函数219
14.3.3 构造函数的默认实参 220
14.3.4 重载构造函数 221
14.3.5 类类型的隐式转换 224
14.4 类的成员函数 225
14.4.1 成员函数的定义 225
14.4.2 成员函数的调用 226
14.4.3常成员函数228
14.4.4 重载成员函数 229
14.5 类中的静态成员 230
14.5.1 静态数据成员 230
14.5.2 静态成员函数 231
14.6 友元 233
14.7 操作符的重载 234
14.8 本章小结 235
14.9 习题 235
第15章 财富的积累——继承（ 教学视频：46分钟） 236
15.1 继承的概念 236
15.2 定义基类与派生类 236
15.3 继承方式 237
15.3.1 公有继承 237
15.3.2 保护继承 238
15.3.3私有继承239
15.4 派生类的构造与析构 240
15.5 组合与继承 241
15.6 赋值兼容原则 243
15.7 多重继承 244
15.7.1 多重继承的结构 244
15.7.2 多重继承中的构造与析构 246
15.8 本章小结 247
15.9 习题 247
第16章 让程序变得更短——模板（ 教学视频：59分钟） 248
16.1 模板的概念与意义 248
16.2 函数模板 249
16.2.1 函数模板的定义 249
16.2.2 函数模板的用法 250
16.2.3 函数模板的重载 251
16.3 类模板 252
16.3.1 类模板的定义 252
16.3.2 类模板的实例化 254
16.3.3 模板类和类模板 255
16.3.4 类模板的应用 255
16.4 本章小结 261
16.5 习题 261
第17章 代码的工厂——虚拟和多态（ 教学视频：43分钟） 262
17.1 多态的定义与实现 262
17.1.1 多态的定义 262
17.1.2 多态的实现 264
17.2 虚拟函数的定义与实现 268
17.2.1 虚函数 268
17.2.2 虚拟析构函数 270
17.2.3 避免虚函数的误用 271
17.3 抽象类与纯虚函数 273
17.3.1 纯虚函数 273
17.3.2 抽象类和具体类 274
17.4 本章小结 276
17.5 习题 276
第18章 让系统变得更健康——异常处理（ 教学视频：62分钟） 277
18.1 异常处理的含义 277
18.2 抛出异常 278
18.3 捕获异常 279
18.4 使用异常 281
18.4.1 何时避免异常 281
18.4.2 异常的典型应用 282
18.4.3 非错误处理 283
18.5 标准异常处理类 284
18.6 本章小结 285
18.7 习题 286
第4篇 综合案例
第19章 学生成绩管理系统（ 教学视频：58分钟） 287
19.1 概要设计 287
19.2 详细设计 287
19.3 代码开发 289
19.3.1 学生类的定义 289
19.3.2 操作类的定义 290
19.3.3 设置学生姓名setname(char na[]) 290
19.3.4 设置学生学号setNo(int n) 291
19.3.5 设置英语成绩setEng(float e) 291
19.3.6 设置语文成绩setChi(float c) 291
19.3.7 设置数学成绩setMat(float m) 291
19.3.8 设置总分settotal(float t) 291
19.3.9 获取姓名getname() 291
19.3.10 获取学号getNo() 291
19.3.11 获取英语成绩getEng() 292
19.3.12 获取语文成绩getChi() 292
19.3.13 获取数学成绩getMat() 292
19.3.14 获取总分gettotal() 292
19.3.15 输入学生信息getdata() 292
19.3.16 总分排序sort() 293
19.3.17 显示所有学生记录disp() 293
19.3.18 初始化界面initdisp() 294
19.3.19 添加数据记录adddata() 294
19.3.20 按照学号查找记录namefind(int) 295
19.3.21 输入学号inputonename() 296
19.3.22 删除学生记录dele(int num) 296
19.3.23 计算平均分函数 297
19.3.24 返回记录数目getns() 297
19.3.25 退出系统quit() 297
19.3.26 程序主函数main 298
19.4 本章小结 299
第20章 银行自动操作终端系统（ 教学视频：27分钟） 300
20.1 概要设计 300
20.2 详细设计 300
20.3 代码开发 303
20.3.1 普通用户账户信息类的定义 303
20.3.2 普通用户账户信息类的实现 304
20.3.3 普通用户个人信息类的定义 304
20.3.4 普通用户个人信息类的实现 305
20.3.5 普通用户个人操作信息类的定义 306
20.3.6 普通用户个人操作信息类的实现 306
20.3.7 封装类的定义 307
20.3.8 操作类的定义 309
20.3.9 声明关于输出的函数 309
20.3.10 系统实现主函数 310
20.4 程序效果 316
20.5 本章小结 317