第1章 C++语言概述 1
1.1 为什么要学习程序设计 1
1.2 C++语言历史 2
1.3 C++语言特点 3
1.4 C++语言程序设计风格 4
1.4.1 结构化程序设计 4
1.4.2 面向对象程序设计 5
1.4.3 泛型程序设计 7
1.5 标准库 8
1.5.1 标准库简介 8
1.5.2 标准模板库 8
习题 10
第2章 第一个C++程序 13
2.1 程序 13
2.2 入门实例 14
2.3 实例分析 15
2.3.1 注释 15
2.3.2 使用空白字符 16
2.3.3 包含其他文件 16
2.3.4 命名空间 17
2.3.5 定义main()函数 18
2.3.6 使用标准输入和输出 18
2.3.7 字符串 20
2.3.8 语句的终止 20
2.3.9 从main()函数返回值 20
2.4 编译C++语言程序 21
2.5 链接 23
2.6 编程环境 23
2.7 家庭账务管理系统——启动界面 24
习题 26
第3章 数据类型 29
3.1 数据类型 29
3.1.1 整数类型 31
3.1.2 浮点类型 33
3.1.3 字符类型 34
3.1.4 布尔类型 35
3.1.5 空类型 35
3.1.6 枚举类型 35
3.2 关键字 36
3.3 常量 36
3.3.1 什么是常量 36
3.3.2 为什么需要常量 37
3.3.3 使用常量 37
3.4 变量 38
3.4.1 什么是变量 38
3.4.2 变量的定义 39
3.4.3 变量的命名 39
3.4.4 变量的赋值 40
3.5 结构体 42
3.5.1 结构体类型的定义和初始化 42
3.5.2 结构体变量的使用 43
3.6 家庭账务管理系统——用户信息 45
习题 48
第4章 控制语句 51
4.1 控制结构 52
4.2 选择语句 52
4.2.1 布尔表达式和关系运算符 53
4.2.2 单路选择if语句 54
4.2.3 双路选择if语句 55
4.2.4 多路选择if语句 56
4.2.5 switch选择语句 58
4.2.6 选择结构的条件表达式 62
4.3 循环语句 63
4.3.1 for循环 64
4.3.2 for循环的嵌套 66
4.3.3 无限循环 68
4.3.4 while循环语句 69
4.3.5 do-while循环语句 71
4.3.6 几种循环方式的比较 72
4.4 转向语句 73
4.4.1 break语句 73
4.4.2 continue语句 73
4.4.3 goto语句 74
4.5 家庭账务管理系统——主菜单 76
习题 79
第5章 函数 81
5.1 函数简介 81
5.2 C++程序组件 82
5.3 函数命名 83
5.4 void函数的声明、定义和调用 83
5.5 返回值函数 86
5.6 参数传递 88
5.6.1 形参和实参 89
5.6.2 向函数传递参数 89
5.6.3 值传递和引用传递 90
5.6.4 传递多个参数 93
5.7 内联函数 95
5.8 函数重载 96
5.9 家庭账务管理系统——设置窗口标题函数 97
习题 100
第6章 数组与字符串 103
6.1 数组的概念 103
6.2 数组的声明 104
6.3 数组的初始化 107
6.4 数组作为函数的参数 111
6.5 二维数组的声明与初始化 114
6.6 二维数组作为函数参数 117
6.7 字符串 119
6.7.1 类C字符串 120
6.7.2 string字符串 122
6.8 家庭账务管理系统的系统登录 123
习题 128
第7章 指针 130
7.1 指针的概念 130
7.2 变量与指针 131
7.3 数组与指针 134
7.4 指针与引用 137
7.5 函数与指针 138
7.5.1 作为函数参数的指针 138
7.5.2 函数指针 139
7.5.3 指针函数 141
7.6 使用const修饰指针 143
7.7 动态内存分配 146
7.8 链表 149
习题 153
第8章 类和对象 155
8.1 面向过程程序设计和面向对象程序设计 156
8.2 类和对象的关系 156
8.3 声明类类型 157
8.3.1 使用struct声明类和使用class声明类 157
8.3.2 对类的成员进行访问 159
8.3.3 类的get和set方法 159
8.4 类的成员函数 162
8.4.1 成员函数的性质 162
8.4.2 在类外定义成员函数 162
8.4.3 inline成员函数 164
8.5 类声明与成员函数定义分离 165
8.6 构造函数 168
8.6.1 什么是构造函数 168
8.6.2 对象的初始化 168
8.6.3 构造函数的作用 169
8.6.4 带参数的构造函数 171
8.6.5 用参数初始化表对数据成员初始化 172
8.6.6 构造函数的重载 173
8.6.7 使用默认参数值的构造函数 174
8.7 析构函数 176
8.8 公有数据的保护 179
8.8.1 常对象成员 179
8.8.2 常对象 182
8.9 静态成员 184
8.9.1 静态数据成员 184
8.9.2 静态成员函数 186
8.10 示例程序:时间标记类 188
8.11 家庭账务管理系统——用户实体类 192
习题 199
第9章 继承与派生 202
9.1 继承和派生的概念 202
9.2 派生类的声明方式 204
9.3 派生类的继承方式 206
9.4 派生类的构造函数和析构函数 207
9.4.1 派生类的构造函数 207
9.4.2 派生类的析构函数 209
9.5 使用继承必须满足的逻辑关系 211
9.6 继承在软件开发中的重要意义 212
9.7 家庭账务管理系统——添加账目及账目查询 213
习题 219
第10章 多态性和虚函数 221
10.1 多态性的概念 221
10.2 虚函数 222
10.2.1 虚函数的作用 222
10.2.2 运行期绑定和编译期绑定 225
10.2.3 虚函数使用方法 226
10.2.4 构造函数与析构函数 227
10.2.5 什么情况下声明虚函数 229
10.3 纯虚函数和抽象类 230
10.3.1 纯虚函数 230
10.3.2 抽象类 233
习题 236
第11章 运算符重载 238
11.1 运算符重载的概念 238
11.2 运算符重载的方法 240
11.3 基本运算符重载 243
11.4 友元函数 244
11.5 赋值运算符重载 246
11.6 输入与输出运算符的重载 249
11.7 特殊运算符的重载 251
11.7.1 下标运算符的重载 251
11.7.2 自增与自减运算符的重载 254
11.7.3 类型转换运算符的重载 256
习题 260
第12章 模板与STL 261
12.1 为什么使用模板 261
12.2 函数模板 263
12.3 类模板 267
12.4 STL 271
12.4.1 STL的组成 272
12.4.2 在程序中使用STL 273
12.5 容器 276
12.5.1 vector容器 277
12.5.2 list容器 280
12.5.3 set容器 283
12.5.4 map容器 285
12.6 算法 287
12.6.1 非变序型算法 287
12.6.2 变序型算法 289
12.6.3 排序算法 291
12.6.4 数值算法 294
12.7 家庭账务管理系统——STL的应用 295
12.7.1 STL的vector的应用 295
12.7.2 用户账目信息及个人信息的持久化保存 297
习题 301