第1章 C+程序设计基础 1
1.1为什么要学习C++程序设计 1
1.2简单的C++程序举例 2
1.3注释方法 3
1.4编程风格 3
1.5 C++程序的词法单位 3
1.5.1 C++程序中的字符 4
1.5.2标识符 4
1.5.3关键字 4
1.6 C++的基本数据类型 5
1.7变量与常量 6
1.7.1变量 6
1.7.2文字常量 7
1.7.3符号常量 8
1.7.4常变量 9
1.8运算符和表达式 9
1.8.1算术运算符和算术表达式 9
1.8.2初识运算符的优先级和结合性 9
1.8.3赋值运算符和赋值表达式 10
1.8.4自增、自减运算 11
1.8.5关系运算符和关系表达式 11
1.8.6逻辑运算符和逻辑表达式 12
1.8.7位运算符及其表达式 13
1.8.8逗号运算符与逗号表达式 15
1.8.9 sizeof运算符 15
1.8.10 C+++的运算符优先级和结合性 16
1.9语句 16
1.10类型转换 17
1.10.1赋值时的类型转换 17
1.10.2混合运算时的类型转换 18
1.10.3强制类型转换 19
1.11简单的输出和输入方法 19
1.11.1 cout对象和cin对象 19
1.11.2格式化输出 22
1.11.3采用函数成员实现格式化输出 24
1.11.4对函数成员的初步讨论 26
1.11.5指定输入域宽 26
1.11.6读取一行 27
1.11.7读取一个字符 27
1.11.8读取字符时易出错的地方 28
1.12枚举类型 29
1.12.1枚举类型的定义 29
1.12.2枚举类型的变量 29
1.12.3枚举类型的应用 30
思考与练习 31
第2章 C++的流程控制 32
2.1算法的基本概念和表示方法 32
2.1.1算法的基本概念 32
2.1.2算法的表示 32
2.1.3算法的三种基本结构 33
2.2选择结构程序设计 34
2.2.1基本的if语句 34
2.2.2嵌套的if语句 36
2.2.3条件运算符 38
2.2.4 switch语句 39
2.3循环结构程序设计 41
2.3.1 while循环 41
2.3.2 do-while循环 42
2.3.3 for循环 42
2.3.4循环嵌套 44
2.3.5 break语句 45
2.3.6 continue语句 46
2.3.7应该少用的goto语句 47
2.4程序设计应用举例 47
思考与练习 51
第3章 函数 54
3.1函数的定义和调用 54
3.1.1概述 54
3.1.2定义函数 54
3.1.3调用函数 55
3.2函数的声明 57
3.3函数的参数传递和返回值 58
3.3.1函数参数的传递方式 58
3.3.2函数的返回值 59
3.4局部变量和全局变量 61
3.4.1内存存储区的布局 61
3.4.2局部变量 62
3.4.3全局变量 62
3.4.4局部变量与栈 63
3.5变量的存储类别 64
3.5.1 auto修饰的变量 64
3.5.2 register修饰的变量 65
3.5.3 static修饰的变量 65
3.5.4 extern修饰的变量 66
3.6默认参数 68
3.7引用做参数 70
3.8函数重载 71
3.9函数模板 74
3.9.1从函数重载到函数模板 74
3.9.2定义函数模板的方法 77
3.9.3函数模板重载 77
3.10内联函数 78
3.11函数的递归调用 79
3.12函数的调试方法 84
3.13编译预处理 85
3.13.1宏定义 85
3.13.2文件包含 87
3.13.3条件编译 87
思考与练习 89
第4章 数组 92
4.1一维数组 92
4.1.1一维数组的定义和应用 92
4.1.2引用一维数组元素 93
4.1.3数组无越界检查 93
4.1.4数组初始化 93
4.2多维数组 95
4.2.1二维数组的定义 95
4.2.2二维数组的初始化 95
4.2.3引用二维数组元素 96
4.3数组做函数参数 97
4.3.1数组元素做函数参数 97
4.3.2数组名做函数参数 98
4.4常用算法举例 99
4.5字符数组与字符串 110
4.5.1字符数组的定义 110
4.5.2字符数组的初始化 111
4.5.3字符串 111
4.5.4字符数组的输入和输出 112
4.6处理字符和字符串 113
4.6.1处理字符的宏 113
4.6.2处理C风格字符串的函数 114
4.6.3自定义字符串处理函数 117
4.7标准C++的string类 119
4.7.1如何使用string类型 119
4.7.2 string对象的比较 120
4.7.3 string对象的初始化 120
4.7.4 string的函数成员 121
4.7.5 string对象应用举例 122
思考与练习 123
第5章 指针 125
5.1指针的概念 125
5.2指针变量 125
5.2.1定义指针变量 125
5.2.2运算符&和* 126
5.2.3引用指针变量 127
5.3指针与数组 129
5.3.1指向数组元素的指针 129
5.3.2指针的运算 130
5.3.3二维数组与指针 132
5.4指针与函数 136
5.4.1基本类型的变量做函数形参 136
5.4.2引用做函数形参 137
5.4.3指针变量做函数形参 138
5.4.4返回指针的函数 140
5.4.5指向函数的指针 142
5.5指针数组与指向指针的指针 143
5.5.1指针数组 143
5.5.2 main函数的参数 146
5.5.3指向指针的指针 146
5.5.4再次讨论main函数的参数 147
5.6内存的动态分配和释放 148
5.7 void和const修饰指针变量 151
5.7.1 void修饰指针 151
5.7.2 const修饰指针 152
5.8对容易混淆概念的总结 153
思考与练习 155
第6章 结构体与链表 158
6.1抽象数据类型 158
6.2结构体的定义及应用 158
6.2.1定义结构体类型 158
6.2.2定义结构体类型的变量 159
6.2.3初始化结构体类型的变量 161
6.2.4结构体类型变量及其成员的引用 161
6.2.5结构体数组与指针 164
6.3用typedef定义类型 166
6.4单向链表 167
6.4.1链表的概念 167
6.4.2带头结点的单向链表常用算法 169
思考与练习 174
第7章 文件操作 175
7.1文件的基本概念 175
7.1.1文件命名的原则 175
7.1.2使用文件的基本过程 175
7.1.3文件流类型 175
7.2打开文件和关闭文件 176
7.2.1打开文件 176
7.2.2文件的打开模式 177
7.2.3定义流对象时打开文件 178
7.2.4测试文件打开是否成功 178
7.2.5关闭文件 179
7.3采用流操作符读写文件 179
7.3.1采用“<<”操作符写文件 179
7.3.2格式化输出在写文件中的应用 181
7.3.3采用“>>”操作符从文件读数据 182
7.3.4检测文件结束 183
7.4流对象做参数 184
7.5出错检测 186
7.6采用函数成员读/写文件 187
7.6.1采用“>>”操作符读文件的缺陷 188
7.6.2采用函数getline读文件 188
7.6.3采用函数get读文件 190
7.6.4采用函数put写文件 191
7.7多文件操作 191
7.8二进制文件 193
7.8.1二进制文件的操作 193
7.8.2读/写结构体记录 194
7.9随机访问文件 197
7.9.1顺序访问文件的缺陷 197
7.9.2定位函数seekp和seekg 197
7.9.3返回位置函数tellp和tellg 200
7.10输入/输出二进制文件综合举例 201
思考与练习 204
第8章 类的基础部分 206
8.1面向过程程序设计与面向对象程序设计的区别 206
8.1.1面向过程程序设计的缺陷 206
8.1.2面向对象程序设计的基本思想 206
8.2类的基本概念 208
8.3定义函数成员 210
8.4定义对象 211
8.4.1访问对象的成员 211
8.4.2指向对象的指针 211
8.4.3引入私有成员的原因 213
8.5类的多文件组织 213
8.6私有函数成员的作用 215
8.7内联函数 216
8.8构造函数和析构函数 217
8.8.1构造函数 218
8.8.2析构函数 220
8.8.3带参构造函数 221
8.8.4构造函数应用举例——输入有效的对象 223
8.8.5重载构造函数 225
8.8.6默认构造函数的表现形式 226
8.9对象数组 227
8.10类的应用举例 230
8.11抽象数组类型 234
8.11.1创建抽象数组类型 234
8.11.2扩充抽象数组类型 236
思考与练习 240
第9章 类的高级部分 241
9.1静态成员 241
9.1.1静态数据成员 241
9.1.2静态函数成员 244
9.2友元函数 246
9.2.1外部函数作为类的友元 246
9.2.2类的成员函数作为另外一个类的友元 247
9.2.3一个类作为另外一个类的友元 250
9.3对象赋值问题 251
9.4拷贝构造函数 252
9.4.1默认的拷贝构造函数 254
9.4.2调用拷贝构造函数的情况 254
9.5运算符重载 257
9.5.1重载赋值运算符 257
9.5.2 this指针 259
9.5.3重载双目算术运算符 262
9.5.4重载单目算术运算符 264
9.5.5重载关系运算符 265
9.5.6重载流操作符“<<”和“>>” 265
9.5.7重载类型转换运算符 267
9.5.8重载操作符“[]” 271
9.5.9重载运算符时要注意的问题 276
9.5.10运算符重载综合举例——自定义string类 276
9.6对象组合 283
思考与练习 284
第10章 继承、多态和虚函数 286
10.1继承 286
10.2保护成员和类的访问 290
10.3构造函数和析构函数 293
10.3.1默认构造函数和析构函数的调用 293
10.3.2向基类的构造函数传参数 294
10.3.3初始化列表的作用 296
10.4覆盖基类的函数成员 297
10.5虚函数 300
10.6纯虚函数和抽象类 303
10.6.1纯虚函数 303
10.6.2抽象类 303
10.6.3指向基类的指针 306
10.7多重继承 307
10.8多继承 308
10.9类模板 311
10.9.1定义类模板的方法 311
10.9.2定义类模板的对象 313
10.9.3类模板与继承 315
思考与练习 317
第11章 异常处理 320
11.1异常 320
11.1.1抛出异常 320
11.1.2处理异常 321
11.2基于对象的异常处理 322
11.3捕捉多种类型的异常 324
11.4通过异常对象获取异常信息 326
11.5再次抛出异常 327
思考与练习 328
第12章 数据库程序设计 329
12.1数据库简介 329
12.2 SQL语句 329
12.2.1定义表 330
12.2.2查询 330
12.2.3插入 330
12.2.4删除 330
12.2.5修改 331
12.3数据库连接 331
12.3.1 ODBC简介 331
12.3.2 ODBC驱动程序 331
12.3.3创建数据源 331
12.4数据库编程中的基本操作 333
12.4.1数据库编程的基本过程 333
12.4.2数据库查询 333
12.4.3插入记录 334
12.4.4修改记录 335
12.4.5删除记录 336
12.5数据库编程综合举例 336
思考与练习 342
课程设计 343
参考文献 347