第1章 C++程序设计基础 1
1.1 为什么要学习C++程序设计 1
1.2 过程化程序设计和面向对象程序设计 2
1.3 简单的输出和输入方法 2
1.3.1 cout对象 2
1.3.2 cin对象 4
1.4 标识符 7
1.5 布尔类型 8
1.6 培养良好的编程风格 8
1.6.1 风格对比 9
1.6.2 注释方法 9
1.7 格式化输出 11
1.7.1 采用操作符实现格式化输出 12
1.7.2 采用函数成员实现格式化输出 17
1.7.3 对函数成员的初步讨论 19
1.8 格式化输入 19
1.8.1 指定输入域宽 19
1.8.2 读取一行 20
1.8.3 读取一个字符 21
1.8.4 读取字符时容易出错的地方 22
1.9 函数的默认参数 23
1.10 引用作函数参数 25
1.11 函数重载 27
1.12 内存的动态分配和释放 30
思考与练习 33
第2章 文件操作 36
2.1 文件的基本概念 36
2.1.1 文件命名的原则 36
2.1.2 使用文件的基本过程 36
2.1.3 文件流类型 37
2.2 打开文件和关闭文件 37
2.2.1 打开文件 38
2.2.2 文件的打开模式 39
2.2.3 定义流对象时打开文件 40
2.2.4 测试文件打开是否成功 40
2.2.5 关闭文件 41
2.3 采用流操作符读写文件 41
2.3.1 采用<<写文件 41
2.3.2 格式化输出在写文件中的应用 43
2.3.3 采用>>从文件读数据 45
2.3.4 检测文件结束 46
2.4 流对象作为参数 47
2.5 出错检测 49
2.6 采用函数成员读写文件 51
2.6.1 采用>>读文件的缺陷 51
2.6.2 采用函数getline读文件 52
2.6.3 采用函数get读文件 53
2.6.4 采用函数put写文件 54
2.7 多文件操作 55
2.8 二进制文件 57
2.8.1 二进制文件的操作 57
2.8.2 读写结构体记录 58
2.9 随机访问文件 62
2.9.1 顺序访问文件的缺陷 62
2.9.2 定位函数seekp和seekg 62
2.9.3 返回位置函数tellp和tellg 65
2.10 输入输出文件 67
思考与练习 71
第3章 类的基础部分 73
3.1 过程化程序设计与面向对象程序设计的区别 73
3.1.1 过程化程序设计的缺陷 74
3.1.2 面向对象程序设计的基本思想 74
3.2 类的基本概念 75
3.3 定义函数成员 78
3.4 定义对象 79
3.4.1 访问对象的成员 79
3.4.2 指向对象的指针 79
3.4.3 引入私有成员的原因 81
3.5 类的多文件组织 82
3.6 私有函数成员的作用 84
3.7 内联函数 85
3.8 构造函数和析构函数 87
3.8.1 构造函数 87
3.8.2 析构函数 89
3.8.3 带参构造函数 91
3.8.4 构造函数应用举例——输入有效的对象 93
3.8.5 重载构造函数 95
3.8.6 缺省构造函数的表现形式 97
3.9 对象数组 98
3.10 类的应用举例 101
3.11 抽象数组类型 106
3.11.1 创建抽象数组类型 106
3.11.2 扩充抽象数组类型 109
思考与练习 114
第4章 类的高级部分 115
4.1 静态成员 115
4.1.1 静态数据成员 116
4.1.2 静态函数成员 118
4.2 友元函数 121
4.3 对象赋值问题 125
4.4 拷贝构造函数 127
4.4.1 默认的拷贝构造函数 129
4.4.2 调用拷贝构造函数的情况 129
4.4.3 拷贝构造函数中的常参数 131
4.5 运算符重载 131
4.5.1 重载赋值运算符 132
4.5.2 this指针 134
4.5.3 重载运算符时要注意的问题 137
4.5.4 重载双目算术运算符 138
4.5.5 重载单目算术运算符 140
4.5.6 重载关系运算符 141
4.5.7 重载流操作符<<和>> 142
4.5.8 重载类型转换运算符 144
4.5.9 重载[]操作符 149
4.5.10 操作符重载综合举例——自定义string类 154
4.6 对象组合 163
思考与练习 165
第5章 继承、多态和虚函数 166
5.1 继承 166
5.2 保护成员和类的访问 171
5.3 构造函数和析构函数 174
5.3.1 缺省构造函数和析构函数的调用 175
5.3.2 向基类的构造函数传参数 176
5.4 覆盖基类的函数成员 179
5.5 虚函数 182
5.6 纯虚函数和抽象类 185
5.6.1 纯虚函数 185
5.6.2 抽象类 186
5.6.3 指向基类的指针 189
5.7 多重继承 190
5.8 多继承 192
思考与练习 195
第6章 异常处理 198
6.1 异常 198
6.1.1 抛出异常 199
6.1.2 处理异常 199
6.2 基于对象的异常处理 201
6.3 捕捉多种类型的异常 203
6.4 通过异常对象获取异常信息 205
6.5 再次抛异常 207
思考与练习 208
第7章 模板 209
7.1 函数模板 209
7.1.1 从函数重载到函数模板 209
7.1.2 在函数模板中使用操作符需要注意的地方 212
7.1.3 在函数模板中使用多种类型 213
7.1.4 重载函数模板 213
7.1.5 定义函数模板的方法 214
7.2 类模板 215
7.2.1 定义类模板的方法 215
7.2.2 定义类模板的对象 217
7.2.3 类模板与继承 219
思考与练习 222
第8章 标准模板库STL 223
8.1 标准模板库简介 223
8.2 string类型 226
8.2.1 如何使用string类型 226
8.2.2 为string对象读取一行 226
8.2.3 string对象的比较 227
8.2.4 string对象的初始化 227
8.2.5 string的函数成员 228
8.2.6 string对象应用举例 230
8.3 迭代器类 231
8.4 顺序容器 233
8.4.1 矢量类 234
8.4.2 列表类 239
8.4.3 双端队列类 242
8.5 函数对象与泛型算法 244
8.5.1 函数对象 245
8.5.2 泛型算法 248
8.6 关联容器 251
8.6.1 集合和多重集合类 251
8.6.2 映射和多重映射类 253
8.7 容器适配器 255
8.7.1 栈容器适配器 255
8.7.2 队列容器适配器 256
8.7.3 优先级队列容器适配器 257
思考与练习 258
第9章 数据库程序设计 259
9.1 数据库简介 259
9.2 SQL语句 260
9.2.1 定义表 260
9.2.2 查询 260
9.2.3 插入 261
9.2.4 删除 261
9.2.5 修改 261
9.3 数据库连接 262
9.3.1 ODBC简介 262
9.3.2 ODBC驱动程序 262
9.3.3 创建数据源 262
9.4 数据库编程中的基本操作 264
9.4.1 数据库编程的基本过程 264
9.4.2 数据库查询 265
9.4.3 插入记录 266
9.4.4 修改记录 267
9.4.5 删除记录 268
9.5 数据库编程综合举例 269
思考与练习 276
附录A 课程设计要求 278
A.1 课程设计简介 278
A.2 程序结构 282
A.3 程序的主要特点 283
A.4 操作说明 283
A.4.1 收银模块 283
A.4.2 书库管理模块 284
A.4.3 报表模块 284
A.4.4 退出系统 285
附录B 课程设计报告格式 286
参考文献 288