C++的国际性标准版本“标准C++”于1998年正式推出,本书以此标准为基础,对C++语言不同层次的知识进行了全面介绍。\r\n 本书以知识单元为基本构件,共分为七个单元:C++函数、控制结构与数据类型;C++库函数与函数模板;C++类与类模板;C++标准库;C++ STL;深入学习C++;附录。本书从最基本的内容讲起,对C++强大的功能做了详细介绍,并结合C++的最新功能,详细论述了面向对象编程的思想。本书针对那些比较难懂的高深主题也做了深入浅出的介绍,比如模板(包括标准模板库)、名字空间、运行时类型信息和区域表示等,这些功能对开发大型复杂系统的程序设计人员非常重要。因此,无论是新手还是有经验的程序员,都可以从本书中找到丰富的信息。使用本书,读者不仅可以学到技术,还可以得到最好的练习,使自己的程序设计水准达到专业水平。\r\n 本书是学习和使用C/C++的优秀图书,最大的特点是内容综合、完整,叙述清晰、易懂,实例典型、丰富,练习、习题实用。同时,由于本书以知识单元为基本构件,便于拆分和重组,可适合不同层次的教学需要。可作为大专院校计算机专业的教材,也可作为从事计算机工作的科技人员的自学参考书。
序言\r\n\r\n第1单元 C++函数、控制结构与数据类型\r\n\r\n第1章 了解C++\r\n\r\n1.1 计算机语言\r\n1.2 C语言和C++语言简史\r\n1.3 从C语言到C++语言的转换\r\n1.4 C++的基本概念\r\n1.5 C++语言及其增强类型\r\n1.6 C++环境\r\n1.7 C语言与C++语言的未来\r\n1.8 C++基本知识点小结\r\n\r\n第2章 编写简单的C++程序\r\n\r\n2.1 主函数main()\r\n实例2-1 一个最小的C++程序\r\n2.2 简单的C++程序\r\n实例2-2 自己编写的第一个C++程序\r\n2.2.1 #include指令\r\n2.2.2 空白\r\n2.2.3 main()函数的声明\r\n2.2.4 main()函数的作用范围\r\n2.2.5 源程序中的注释\r\n2.2.6 控制台输出\r\n2.2.7 return语句\r\n2.2.8 程序的结束\r\n2.3 标识符\r\n2.4 关键字\r\n2.5 标准输出流\r\n2.6 变量\r\n2.6.1 布尔型\r\n实例2-3 应用布尔型变量\r\n2.6.2 字符型\r\n实例2-4 字符型变量的应用\r\n2.6.3 wchar_t型\r\n实例2-5 wchar_t型变量的使用\r\n2.6.4 整型\r\n实例2-6 引用int数据类型\r\n2.6.5 浮点类型\r\n实例2-7 声明和引用浮点型变量\r\n2.7 常量\r\n2.7.1 字符型常量\r\n2.7.2 转义字符\r\n2.7.3 整型常量\r\n2.7.4 浮点型常量\r\n2.7.5 地址常量\r\n2.7.6 字符串常量\r\n实例2-8 字符串常量的合并\r\n2.8 表达式\r\n2.9 赋值语句\r\n实例2-9 应用赋值语句和表达式\r\n2.10 用逗号分隔开的声明语句\r\n2.11 表达式中的运算符\r\n2.11.1 算术运算符\r\n实例2-10 表达式赋值\r\n2.11.2 逻辑运算符\r\n2.11.3 位逻辑运算符\r\n2.11.4 位移运算符\r\n2.11.5 关系运算符\r\n2.11.6 自增和自减运算符\r\n实例2-11 自增和自减运算符的位置\r\n2.11.7 赋值运算符\r\n实例2-12 赋值运算符\r\n2.11.8 复合赋值运算符\r\n实例2-13 复合赋值运算符应用\r\n2.11.9 条件运算符\r\n实例2-14 计算罚款数目\r\n2.11.10 逗号运算符\r\n实例2-15 逗号运算符应用\r\n2.12 优先级和计算顺序\r\n2.12.1 结合律\r\n2.12.2 优先级\r\n2.13 表达式不参加运算的情况\r\n2.14 初始化\r\n实例2-16 不同变量的初始化\r\n2.15 类型转换\r\n实例2-17 几种类型转换\r\n2.16 控制台输入与输出\r\n2.16.1 标准输出流\r\n实例2-18 利用std::cout优化代码\r\n2.16.2 格式化输出\r\n实例2-19 用三种进制形式显示整数\r\n2.16.3 标准错误流\r\n2.16.4 标准输入流\r\n实例2-20 使用cin从键盘读入一个整数\r\n实例2-21 使用std::cin设备从键盘把字符串读入到字符串数组中\r\n\r\n第3章 C++函数\r\n\r\n3.1 函数简介\r\n3.2 函数原型\r\n3.2.1 无标识符的参数类型\r\n3.2.2 函数原型例\r\n3.2.3 void型函数\r\n3.2.4 无参数的函数\r\n3.2.5 参数个数可变的函数\r\n3.2.6 既没有返回值也不带参数的函数\r\n3.2.7 标准库函数的原型\r\n3.2.8 不需要原型的函数\r\n3.3 函数的定义与调用\r\n实例3-1 定义一个函数\r\n3.4 函数的返回\r\n实例3-2 return语句可在函数体内的任何位置\r\n3.5 函数的返回值\r\n实例3-3 计算宽度\r\n3.6 参数的传递和使用\r\n实例3-4 计算宽度——改进版本\r\n3.6.1 标识符的作用域\r\n3.6.2 通过函数调用来初始化\r\n3.6.3 初始化执行的顺序\r\n3.6.4 传递多个参数\r\n实例3-5 计算砖块的体积\r\n3.6.5 用做实参的函数调用\r\n3.6.6 值传递\r\n3.6.7 实参和返回值的类型转换\r\n3.7 无名的函数形参\r\n3.8 函数的默认参数\r\n实例3-6 默认参数的用法\r\n3.9 内联函数\r\n实例3-7 指定为内联函数\r\n3.10 递归\r\n3.11 函数重载\r\n3.11.1 为完成不同的操作而重载\r\n实例3-8 复制字符串\r\n3.11.2 为不同的格式而重载\r\n实例3-9 显示时间\r\n3.12 安全连接\r\n3.13 连接说明\r\n实例3-10 使用C的连接约定\r\n\r\n第4章 C++控制结构\r\n\r\n4.1 语句块\r\n4.1.1 嵌套深度\r\n4.1.2 缩进风格\r\n4.2 条件语句\r\n4.2.1 if语句\r\n实例4-1 检验条件是否为零\r\n实例4-2 检验变量是否为零\r\n实例4-3 条件为真时执行\r\n4.2.2 if…else语句\r\n实例4-4 有条件地执行程序块\r\n4.2.3 else…if语句\r\n实例4-5 屏幕菜单程序\r\n4.2.4 switch…case语句\r\n实例4-6 检验整型变量的取值\r\n4.2.5 在if语句的条件表达式里声明变量\r\n4.3 循环语句\r\n4.3.1 while语句\r\n实例4-7 菜单选择与退出\r\n4.3.2 do…while语句\r\n实例4-8 猜谜游戏\r\n4.3.3 for语句\r\n实例4-9 限次循环显示\r\n实例4-10 遍历数组中的每一个元素\r\n4.3.4 在for语句的条件表达式内声明变量\r\n4.4 循环控制\r\n4.4.1 break语句\r\n实例4-11 终止并跳出循环\r\n4.4.2 continue语句\r\n实例4-12 中断但不跳出循环\r\n4.5 跳转\r\n实例4-13 跳转到任意可执行语句\r\n4.5.1 goto语句的错误用法\r\n4.5.2 C++的go和C的goto\r\n4.5.3 goto语句错误的改正\r\n实例4-14 优化的跳转程序之一\r\n实例4-15 优化的跳转程序之二\r\n4.5.4 是否可以使用goto语句\r\n\r\n第5章 C++数据类型\r\n\r\n5.1 作用域\r\n5.1.1 全局作用域\r\n实例5-1 具有全局作用域的外部变量\r\n5.1.2 局部作用域\r\n实例5-2 具有局部作用域的变量\r\n实例5-3 作用域的屏蔽\r\n5.1.3 全局作用城解析符\r\n实例5-4 使用全局作用域解析符\r\n5.1.4 文件作用域\r\n实例5-5 static存储类型修饰符\r\n5.1.5 作用域和生存周期\r\n实例5-6 变量的生存周期\r\n5.2 存储类型\r\n5.2.1 自动存储类型\r\n5.2.2 静态存储类型\r\n实例5-7 静态局部变量\r\n5.2.3 外部存储类型\r\n实例5-8 使用外部变量\r\n5.2.4 寄存器存储类型\r\n实例5-9 使用寄存器变量\r\n5.3 初始化的默认值\r\n5.4 类型修饰符\r\n5.4.1 const类型修饰符\r\n实例5-10 使用const型变量作为循环的上限\r\n5.4.2 volatile类型修饰符\r\n实例5-11 声明volatile型变量\r\n5.5 用户定义的数据类型\r\n5.5.1 结构的声明\r\n5.5.2 结构变量的定义\r\n5.5.3 对结构成员的引用\r\n实例5-12 结构的声明与使用\r\n5.5.4 结构的初始化\r\n实例5-13 初始化结构变量\r\n5.5.5 结构的嵌套\r\n实例5-14 声明两个结构\r\n5.5.6 向函数传递结构和从函数返回结构\r\n实例5-15 传递和返回结构\r\n5.6 联合数据类型\r\n实例5-16 使用联合\r\n5.6.1 联合的初始化\r\n实例5-17 初始化一个包含结构的联合\r\n5.6.2 匿名联合\r\n实例5-18 使用匿名联合\r\n5.6.3 枚举常量\r\n实例5-19 在switch语句中使用枚举类型\r\n5.7 数组\r\n5.7.1 数组的声明\r\n5.7.2 利用下标访问数组元素\r\n5.7.3 数组的初始化\r\n实例5-20 一个简单的7元素整型数组\r\n5.7.4 结构数组\r\n实例5-21 一个简单的结构数组\r\n5.7.5 多维数组\r\n实例5-22 二维数组——税收数据表\r\n5.7.6 字符型数组\r\n实例5-23 初始化字符型数组\r\n\r\n第6章 指针、地址与引用\r\n\r\n6.1 指针和地址\r\n6.1.1 指向内部数据类型的指针\r\n实例6-1 指向C++内部数据类型的指针\r\n6.1.2 指针的算术运算\r\n实例6-2 指针运算\r\n实例6-3 利用指针变量对数组进行遍历\r\n6.1.3 指针和数组\r\n实例6-4 一种新的数组地址表示法\r\n实例6-5 指针和数组的几种常见用法\r\n6.1.4 结构指针\r\n实例6-6 利用结构指针遍历结构数组\r\n6.1.5 用做函数参数的指针\r\n实例6-7 指针作为参数使用\r\n实例6-8 指向多维数组的指针参数\r\n6.1.6 以地址作为函数的返回值\r\n实例6-9 返回地址的函数\r\n实例6-10 利用指针遍历数组\r\n6.1.7 函数指针\r\n实例6-11 函数指针的用法\r\n实例6-12 菜单管理器\r\n6.1.8 指针的指针\r\n实例6-13 检索指针的指向\r\n6.1.9 指向指针数组的指针\r\n实例6-4 字符串表\r\n6.1.10 指向const型变量的指针\r\n实例6-15 标准C的std::strcpy()函数实现\r\n6.1.11 const型指针变量\r\n实例6-16 使用const型指针\r\n6.1.12 void型指针\r\n实例6-17 标准C在<cstdlib>头文件中声明的内存管理函数\r\n6.2 sizeof运算符\r\n实例6-18 动态地计算数组元素的个数\r\n6.3 C风格的强制类型转换与typedef\r\n实例6-19 改变记录计数器的数值类型\r\n6.4 命令行参数\r\n实例6-20 命令行参数的用法\r\n6.5 程序的内存结构\r\n6.5.1 堆\r\n6.5.2 new和delete运算符\r\n实例6-21 new和deletet运算符的用法\r\n6.5.3 为固定大小的数组分配内存\r\n实例6-22 用new和delete为数组分配和释放内存\r\n6.5.4 为动态数组分配内存\r\n实例6-23 用new运算符为可变大小的数组分配内存\r\n6.5.5 堆耗尽时的处理\r\n6.5.6 栈\r\n6.6 递归\r\n6.6.1 一个简单递归的例子\r\n实例6-24 逆序显示姓名\r\n6.6.2 一个使用了违归的计算器程序\r\n实例6-25 一个计算数字表达式的计算器程序\r\n6.7 引用型变量\r\n6.7.1 引用是一个别名\r\n实例6-26 引用型变量的用法\r\n实例6-27 比较实际变量地址和引用地址\r\n6.7.2 引用的初始化\r\n6.7.3 利用引用来简化复杂的表示法\r\n实例6-28 利用引用来简化复杂的表示法\r\n6.7.4 作为函数形参的引用\r\n实例6-29 以引用代替复制\r\n6.7.5 以引用方式调用\r\n实例6-30 把引用作为参数传递\r\n6.7.6 const型引用形参\r\n6.7.7 以引用作为返回值\r\n实例6-31 引用函数返回值\r\n6.7.8 以const型引用作为返回值\r\n6.7.9 返回指向自变量的引用\r\n6.7.10 指针和引用\r\n第1单元练习\r\n\r\n第2单元 C++库函数与函数模板\r\n\r\n第7章 C++库函数和宏\r\n\r\n7.1 <cassert>\r\n实例7-1 assert宏的用法\r\n7.2 <cctype>\r\n7.3 <cerrno>\r\n实例7-2 errno变量的用法\r\n7.4 <cmath>\r\n7.5 <csetjmp>\r\n实例7-3 setjmp()和longimp()函数的用法\r\n7.6 <cstdarg>\r\n实例7-4 处理参数个数可变的函数\r\n7.7 <cstdio>\r\n7.8 <cstdlib>\r\n7.8.1 数字函数\r\n7.8.2 内存管理函数\r\n7.8.3 系统函数\r\n7.8.4 随机数发生器函数\r\n实例7-5 改进的猜谜游戏\r\n7.9 <cstring>\r\n实例7-6 比较和复制字符串\r\n7.10 <ctime>\r\n实例7-7 显示当前的格林威治标准时间\r\n\r\n第8章 C++程序的预处理\r\n\r\n8.1 预处理指令\r\n8.2 文件的包含与#include指令\r\n8.3 宏\r\n8.3.1 #define指令\r\n8.3.2 带参数的#define指令\r\n实例8-1 计算工资\r\n实例8-2 改进后的计算工资程序\r\n8.3.3 格式和对齐\r\n8.3.4 #运算符\r\n实例8-3 字符串化运算符的用法\r\n8.3.5 ##运算符\r\n实例8-4 符号连接运算符的用法\r\n实例8-5 符号连接运算符的高级用法\r\n8.3.6 #undef指令\r\n8.4 条件编译指令\r\n8.4.1 #if指令\r\n8.4.2 #endif指令\r\n实例8-6 #if和#endif的用法\r\n8.4.3 #if defined指令\r\n实例8-7 检测宏是否被定义\r\n8.4.4 #ifdef和#ifndef指令\r\n8.4.5 #else指令\r\n实例8-8 #else预处理指令的用法\r\n8.4.6 #elif指令\r\n实例8-9 #elif预处理指令的用法\r\n8.4.7 #error指令\r\n实例8-10 检测宏表示的值\r\n8.5 其他标准指令\r\n8.5.1 #line指令\r\n8.5.2 #pragma指令\r\n\r\n第9章 C++结构与类\r\n\r\n9.1 C++的类\r\n9.2 数据类型的属性\r\n9.2.1 数据描述\r\n9.2.2 实现\r\n9.2.3 性质\r\n9.2.4 接口\r\n9.3 用户定义数据类型\r\n9.3.1 抽象\r\n9.3.2 对象是什么\r\n9.3.3 数据抽象和面向过程编程\r\n实例9-1 显示日期\r\n9.3.4 数据抽象和封装\r\n9.4 带有函数的结构体\r\n9.4.1 向结构体添加函数\r\n实例9-2 显示一个人的生日\r\n9.4.2 同一结构的多个实例\r\n实例9-3 显示几个人的生日\r\n9.4.3 具有相同函数名的不同结构\r\n实例9-4 显示日期和时间\r\n9.5 访问控制符\r\n9.6 面向过程的编程方法\r\n9.7 类与结构的比较\r\n9.8 联合体\r\n\r\n第10章 C++函数模板\r\n\r\n10.1 函数模板基础\r\n实例10-1 一个简单的函数模板\r\n实例10-2 显示最小数\r\n10.2 函数的定制\r\n实例10-3 比较两个字符串\r\n实例10-4 定制函数模板\r\n10.3 使用模板排序\r\n实例10-5 定义函数模板\r\n实例10-6 对整数进行排序\r\n第2单练习\r\n\r\n第3单元 C++类与类模板\r\n\r\n第11章 C++类\r\n11.1 类的设计\r\n11.1.1 类的声明\r\n实例11-1 计算立方体的体积\r\n11.1.2 类的成员\r\n11.1.3 类成员的可见性\r\n11.1.4 数据成员\r\n11.1.5 初始化\r\n11.1.6 成员函数\r\n11.1.7 面向对象的类的设计方法\r\n11.1.8 类对象的作用域\r\n11.1.9 内联函数\r\n实例11-2 使用内联函数计算立方体的体积\r\n11.2 构造函数\r\n11.2.1 使用默认参数的构造函数\r\n实例11-3 用默认值来初始化\r\n11.2.2 默认构造函数\r\n11.2.3 重载构造函数\r\n实例11-4具有两个构造函数的类\r\n11.3 析构函数\r\n11.4 类的转换\r\n11.4.1 转换函数\r\n11.4.2 转换构造函数\r\n实例11-5 从std::time_t对象到Date类对象的转换\r\n11.4.3 成员转换函数\r\n实例11-6 计算从20世纪开始至今的天数\r\n11.4.4 类的转换\r\n实例11-7 对两种日期进行转换\r\n11.4.5 转换函数的调用\r\n实例11-8 三种类转换形式\r\n11.4.6 其他转换方法\r\n实例11-9 多种转换方法\r\n11.4.7 显式构造函数\r\n11.4.8 表达式内部的转换\r\n实例11-10 对两种日期进行转换\r\n11.5 私有数据成员的使用\r\n11.5.1 取值和赋值成员函数\r\n实例11-11 通过成员函数来使用数据成员\r\n11.5.2 常量成员函数\r\n11.5.3 改进的成员转换函数\r\n实例11-12 隐藏数据时的转换\r\n11.6 友元\r\n11.6.1 友元类\r\n实例11-13 友元类的用法\r\n11.6.2 隐式构造函数\r\n11.6.3 前向引用\r\n11.6.4 显式友元前向引用\r\n实例11-14 不使用前向引用\r\n11.6.5 友元函数\r\n实例11-15 类的友元函数\r\n11.6.6 匿名对象\r\n11.6.7 非类成员的友元函数\r\n实例11-16 用友元函数将两个类联系起来\r\n11.7 析构函数的使用\r\n实例11-17 使用析构函数显示月份\r\n11.8 重载赋值运算符\r\n实例11-18 类的赋值\r\n11.9 this指针\r\n11.9.1 以this指针作为返回值\r\n实例11-19 this指针\r\n11.9.2 在链表中使用this指针\r\n实例11-20 this指针和链表\r\n11.10 类对象数组\r\n实例11-21 类的数组\r\n11.10.1 类对象数组和默认构造函数\r\n实例11-22 类数组的构造函数\r\n11.10.2 类对象数组和析构函数\r\n实例11-23 类数组的析构函数\r\n11.11 静态成员\r\n11.11.1 静态数据成员\r\n实例11-24 静态成员和链表\r\n11.11.2 静态成员函数\r\n实例11-25 显示姓名\r\n11.11.3 公有静态成员\r\n11.12 类和堆\r\n11.12.1 构造函数和析构函数\r\n实例11-26 new和deleteAl算符\r\n11.12.2 堆和类数组\r\n实例11-27 错误地释放类数组所占内存\r\n实例11-28 正确地删除对象数组指针\r\n11.12.3 重载new和delete运算符\r\n实例11-29 针对某个类的new和delete运算符\r\n11.12.4 检测异常\r\n11.12.5 重载new和delete中的异常处理\r\n11.12.6 重载new[]和delete[]\r\n实例11-30 针对类的new[]和delete[]运算符\r\n11.13 副本构造函数\r\n实例11-31 调用副本构造函数的两种方法\r\n11.14 类的引用\r\n实例11-32 使用了引用的类\r\n11.15 构造函数的参数初始化表\r\n11.16 对const修饰符的简单说明\r\n11.17 可变的数据成员\r\n实例11-33 使用可变数据成员\r\n11.18 类的源文件和目标文件的管理\r\n11.18.1 头文件中的类声明\r\n11.18.2 库中的类成员函数\r\n\r\n第12章 运算符重载\r\n\r\n12.1 运算符重载的时机\r\n12.2 运算符重载的一个例子\r\n12.3 运算符重载的规则\r\n12.4 双目算术运算符\r\n12.5 作为类成员的运算符函数\r\n实例12-1 重载+运算符\r\n12.6 非类成员的运算符函数\r\n实例12-2 用非类成员来重载+运算符\r\n12.7 关系运算符\r\n实例12-3 重载关系运算符\r\n12.8 其他的赋值运算符\r\n实例12-4 重载+=运算符\r\n12.9 自增和自减运算符\r\n实例12-5 重载++运算符\r\n12.10 单目正、负运算符\r\n实例12-6 重载单目负运算符\r\n12.11 下标算符\r\n实例12-7 重载下标运算符[]\r\n12.12 成员指针运算符\r\n实例12-8 重载->运算符\r\n\r\n第13章 类的继承\r\n\r\n13.1 继承\r\n13.2 为什么要使用继承\r\n13.3 数据抽象类的设计\r\n13.3.1 基类\r\n实例13-1 声明类Date\r\n13.3.2 效率设计\r\n实例13-2 实现类Date\r\n13.3.3 单继承\r\n13.3.4 派生类\r\n实例13-3 声明派生类\r\n13.3.5 受保护的成员\r\n13.3.6 派生类的成员和定制的成员\r\n13.3.7 公有和私有的基类\r\n133.8 基类和派生类的构造函数\r\n13.3.9 定制新的成员函数\r\n13.3.10 重定义基类的成员函数\r\n实例13-4 实现类的静态数据成员和非内联成员函数\r\n13.3.11 编写程序\r\n实例13-5 通过继承定制抽象数据类型\r\n13.3.12 用于基类和派生类的作用城运算符\r\n实例13-6 类的作用域运算符\r\n13.3.13 多个派生类\r\n13.3.14 第二个派生类\r\n实例13-7 CustomDate.h\r\n实例13-8 CustomDate.cpp\r\n13.3.15 使用基类和派生类\r\n实例13-9 多个派生类\r\n13.3.16 派生类之间的关系\r\n13.3.17 从派生类派生出的类\r\n实例13-10 SpecialCustomDate.h\r\n实例13-11 从派生类中派生类\r\n13.4 类层次结构的设计\r\n13.4.1 C++与纯面向对象的设计\r\n13.4.2 数据抽象\r\n13.4.3 重载运算符<<和>>\r\n实例13-12 重载运算符<<和>>\r\n实例13-13 使用重载运算符<<和>>\r\n13.4.4 两个更为抽象的数据\r\n实例13-14 Ssn.h\r\n实例13-15 Ssn.cpp\r\n实例13-16 Money.h\r\n实例13-17 Money.cpp\r\n13.4.5 包含头文件\r\n13.4.6 C++标准字符串类\r\n13.5 基类Person\r\n实例13-18 Person.h\r\n实例13-19 Person.cpp\r\n13.5.1 类中的枚举数据类型\r\n13.5.2 虚函数\r\n13.5.3 纯虚函数\r\n13.5.4 两种显示方式\r\n13.6 派生类\r\n13.6.1 类Employee\r\n实例13-20 Employee.h\r\n实例13-21 Employee.cpp\r\n13.6.2 函数重载\r\n13.6.3 类WagedEmployee\r\n实例13-22 WagedEmployee.h\r\n实例13-23 WagedEmployee.cpp\r\n13.6.4 类SalariedEmployee\r\n实例13-24 SalariedEmployee.h\r\n实例13-25 SalanedEmployee.cpp\r\n13.6.5 类Contractor\r\n实例13-26 Contractor.h\r\n实例13-27 Contractor.cpp\r\n13.6.6 构造目标代码库\r\n13.6.7 使用问题域类层次结构\r\n实例13-28 人事管理应用程序\r\n13.6.8 用引用方式调用虚函数\r\n13.6.9 用引用方式调用非虚函数\r\n13.6.10 对重定义的虚函数的调用\r\n13.6.11 派生类没有重定义的虚函数\r\n13.6.12 虚析构函数\r\n实例13-29 基类非虚析构函数\r\n实例13-30 基类的虚析构函数\r\n13.6.13 应该定义为虚函数的成员函数\r\n13.7 多态性\r\n\r\n第14章 类的多重继承\r\n\r\n14.1 多个基类\r\n14.1.1 多重继承中的构造函数的执行\r\n14.1.2 多重继承中的析构函数的执行\r\n14.2 细化资产系统的设计\r\n14.3 重定义多重继承中的成员\r\n14.4 多重继承中的二义性\r\n14.4.1 二义性成员函数\r\n14.4.2 二义性数据成员\r\n14.4.3 在设计时解决二义性问题\r\n14.4.4 不可避免的二义性问题\r\n14.5 虚基类\r\n14.6 设计的实现\r\n14.6.1 类DisplayObject\r\n实例14-1 实现基类DisplayObject\r\n14.6.2 类Vehicle\r\n实例14-2 实现类Vehicle\r\n14.6.3 类Property\r\n实例14-3 实现类Property\r\n14.6.4 类Asset和Expense\r\n实例14-4 实现类Asset\r\n实例14-5 实现类Expense\r\n14.6.5 类Computer和Pencile\r\n14.6.6 类CompanyCar和LeaseCar\r\n实例14-6 实现类CompanyCar和LeaseCar\r\n14.6.7 应用程序\r\n实例14—7 多重继承\r\n14.7 回顾\r\n\r\n第15章 类模板\r\n\r\n15.1 类模板的基本知识\r\n15.2 声明模板类的多个对象\r\n15.3 调用类模板的成员函数\r\n15.4 声明多个参数\r\n实例15-1 简单的类模板\r\n实例15-2 为具体类型的参数提供默认值\r\n15.5 有界数组类模板\r\n实例15-3 类模板头文件\r\n实例15-4 使用有界数组模板\r\n15.6 何时使用类模板\r\n15.7 链表模板\r\n实例15-5 使用链表模板\r\n15.7.1 整数值对象链表\r\n实例15-6 使用整型值对象的链表类\r\n15.7.2 日期对象链表\r\n实例15-7 使用日期链表模板\r\n15.8 定制模板\r\n15.8.1 定制类模板\r\n实例15-8 定制类模板\r\n15.8.2 定制模板成员函数\r\n实例15-9 定制显示成员函数\r\n15.8.3 模板的部分定制\r\n实例15-10 部分定制模板\r\n15.9 类模板的默认参数\r\n\r\n实例15-11 默认模板参数\r\n\r\n第16章 面向对象的程序设计\r\n\r\n16.1 基本知识\r\n16.2 过程化程序设计\r\n16.3 面向对象的程序设计\r\n16.3.1 面向对象的程序\r\n16.3.2 对象\r\n16.3.3 抽象\r\n16.3.4 封装\r\n16.3.5 方法和消息\r\n16.3.6 功能性方法\r\n16.3.7 数据类型方法\r\n16.3.8 隐式类型转换方法\r\n16.3.9 成员函数\r\n16.3.10 继承\r\n16.3.11 单个继承\r\n16.3.12 多重继承\r\n16.3.13 类的关系\r\n16.3.14 多态性\r\n16.4 小结\r\n第3单元练习\r\n\r\n第4单元 C++标准库\r\n\r\n第17章 标准库简介\r\n\r\n17.1 类std::string\r\n17.1.1 构造字符串\r\n17.1.2 给字符串赋值\r\n17.1.3 字符串连接\r\n17.1.4 字符串的下标\r\n17.1.5 字符串的比较\r\n17.1.6 子串\r\n17.1.7 搜索字符串\r\n17.1.8 字符串操作\r\n17.2 输入/输出流\r\n17.2.1 流类\r\n17.2.2 缓冲输出\r\n17.2.3 格式化输出\r\n实例17-1 使用成员函数put()\r\n实例17-2 ostream的成员函数write()\r\n实例17-3 istream的成员函数get()\r\n实例17-4 为函数get()指定缓冲区地址和长度\r\n实例17-5 istream的成员函数getline()\r\n实例17-6 istream的成员函数read()\r\n17.2.4 文件的输入/输出\r\n17.3 类std::complex\r\n实例17-7 类complex\r\n17.4 标准模板类\r\n17.5 标准异常\r\n实例17-8 从C++标准库的exception类派生出异常类\r\n\r\n第18章 格式化输出与字符串处理\r\n\r\n18.1 格式化输出\r\n实例18-1 显示浮点值\r\n18.2 操纵算子、标志和成员函数\r\n18.2.1 函数ios::width\r\n实例18-2 利用成员函数Width()控制输出宽度\r\n18.2.2 操纵算子std::setw\r\n实例18-3 以表格形式显示数据\r\n18.2.3 函数std::ios::fill\r\n实例18-4 用星号填充一列数\r\n18.2.4 输出对齐\r\n实例18-5 操纵算子setiosflags和resetiosflags\r\n18.2.5 操纵算子setprecision\r\n实例18-6 操纵算子setprecision\r\n18.2.6 科学记数法和定点记数法\r\n实例18-7 设置ios::fixed标志\r\n18.2.7 函数std::ios::setf和std::ios::unsetf\r\n18.2.8 格式化标志\r\n18.2.9 格式化操纵算子\r\n18.2.10 格式化函数\r\n实例18-8 类std::istringstream\r\n实例18-9 类Std::ostringstream\r\n实例18-10 类Std::stringstream\r\n\r\n第19章 C++输入/输出流\r\n\r\n19.1 文件流类的层次结构\r\n19.2 类std::ofstream\r\n实例19-1 文件输出\r\n实例19-2 向输出文件追加内容\r\n实例19-3 避免打开现有的文件\r\n实例19-4 把类对象的二进制表示记录到数据文件中\r\n实例19-5 使用ofstream的成员函数\r\n19.3 类ifstream\r\n实例19-6 从文件中读取类Date的对象\r\n19.3.1 读取文件直至文件结束\r\n实例19-7 测试是否文件结束\r\n19.3.2 在文件中定位\r\n实例19-8 成员函数seekg()\r\n实例19-9 确定输入的当前位置\r\n19.3.3 读取和写人流文件\r\n实例19-10 读写流文件\r\n19.3.4 文件和流的关联与解除关联\r\n实例19-11 成员函数open()和close()\r\n19.4 二进制文件与文本文件\r\n19.5 类std::fstream\r\n实例19-12 输入输出流\r\n第4单元练习\r\n\r\n第5单元 C++STL\r\n\r\n第20章 STL概述\r\n\r\n20.1 为什么需要STL\r\n20.2 STL编程模型\r\n20.2.1 序列\r\n20.2.2 容器适配器\r\n20.2.3 结合容器\r\n20.2.4 指示器\r\n20.2.5 算法\r\n20.2.6 函数对象参数\r\n20.2.7 内存分配器\r\n\r\n第21章 序列在程序中的使用\r\n\r\n21.1 序列容器简介\r\n21.2 向量类模板\r\n实例21-1 创建简单的向量\r\n21.2.1 插入和访问向量元素\r\n实例21-2 给向量添加元素\r\n实例21-3 在向量中的任意位置插入元素\r\n21.2.2 删除向量元素\r\n实例21-4 从向量中删除元素\r\n实例21-5 在向量中的任意位置删除元素\r\n21.2.3 向量的比较\r\n实例21-6 向量比较\r\n21.2.4 向量的成员函数\r\n21.3 双端队列类模板\r\n实例21-7 创建一个简单的双端队列\r\n21.3.1 插入和访问双端队列的元素\r\n实例21-8 给双端队列添加元素\r\n实例21-9 在双端队列的任意位置插入元素\r\n21.3.2 删除双端队列的元素\r\n实例21-10 删除字符序列中的字符\r\n实例21-11 删除双端队列中任意位置处的元素\r\n21.3.3 比较双端队列\r\n实例21-12 比较双端队列\r\n21.3.4 双端队列的成员函数\r\n21.4 链表模板类\r\n实例21-13 创建一个简单的链表\r\n21.4.1 插入链表元素\r\n实例21-14 给链表添加元素\r\n实例21-15 在链表的任意位置插入元素\r\n21.4.2 删除链表元素\r\n实例21-16 从链表中删除元素\r\n实例21-17 删除链表中任意位置处的元素\r\n21.4.3 比较链表\r\n实例21-18 比较链表\r\n21.4.4 链表成员函数\r\n21.5 容器适配器std::stack\r\n实例21-19 管理堆栈\r\n21.6 容器适配器std::queue\r\n实例21-20 管理队列\r\n21.7 容器适配器std::priority_queue\r\n实例21-21 管理优先级队列\r\n\r\n第22章 结合容器\r\n\r\n22.1 介绍结合容器\r\n22.2 类模板std::set\r\n实例22-1 创建一个简单集合\r\n22.2.1 插入集合元素\r\n实例22-2 向集合中添加元素\r\n22.2.2 删除集合中的元素\r\n实例22-3 从一个集合中的任意位置删除元素\r\n22.2.3 对集合进行搜索\r\n实例22-4 在集合中查找一个元素\r\n22.2.4 在集合之间进行比较\r\n实例22-5 比较集合\r\n22.2.5 集合的成员函数\r\n22.3 类模板std::multiset\r\n实例22-6 创建一个简单的多重集合\r\n22.3.1 插入std::multiset元素\r\n实例22-7 对一个多重集合添加元素\r\n22.3.2 删除多重集合的元素\r\n实例22-8 在一个多重集合的任意位置删除元素\r\n22.3.3 对std::multiset进行搜索\r\n实例22-9 搜索一个多重集合\r\n22.3.4 在std::multiset集合之间进行比较\r\n实例22-10 比较多重集合\r\n22.3.5 多重集合的成员函数\r\n22.4 类模板std::map\r\n实例22-11 创建一个简单映射\r\n22.4.1 插入map元素\r\n实例22-12 为映射添加元素\r\n实例22-13 使用[]操作符在std::map对象中插入元素\r\n22.4.2 删除映射中的元素\r\n实例22-14 删除映射中任意位置上的元素\r\n22.4.3 对映射进行搜索\r\n实例22-15 搜索一个映射\r\n22.4.4 在映射之间进行比较\r\n实例22-16 比较映射\r\n22.4.5 映射成员函数\r\n22.5 类模板std::multimap\r\n实例22-17 创建并显示一个简单的多重映射\r\n22.5.1 插入multimap元素\r\n22.5.2 删除多重映射的元素\r\n实例22-18 在多重映射的任意位置删除元素\r\n22.5.3 搜索多重映射\r\n实例22-19 搜索一个多重映射\r\n22.5.4 对多重映射进行比较\r\n实例22-20 比较多重映射\r\n22.5.5 多重映射的成员函数\r\n22.6 类模板std::bitset\r\n22.6.1 在位集合中对位进行操作\r\n实例22-21 std::bitset类成员函数的用法\r\n22.6.2 在位集合中测试位\r\n实例22-22 测试位\r\n22.6.3 比较位集合\r\n实例22-23 比较两个位集合\r\n22.6.4 位集合的成员函数\r\n22.7 用户定义的谓词\r\n实例22-24 谓词\r\n22.8 小结\r\n\r\n第23章 通用算法\r\n\r\n23.1 介绍通用算法\r\n23.2 非修正序列算法\r\n实例23-1 查找对象中相匹配的元素\r\n实例23-2 确定集合中某值出现的次数\r\n实例23-3 显示多重集合的内容\r\n23.3 修正序列算法\r\n实例23-4 用0来填充向量\r\n实例23-5 打乱向量中的内容\r\n实例23-6 把所有的数字5都放到向量的开端\r\n实例23-7 重新组织向量中的字符\r\n23.4 排序算法\r\n实例23-8 向量排序\r\n实例23-9 向量排序并将结果前置\r\n实例23-10 std::nth_element()函数的用法\r\n实例23-11 合并向量\r\n实例23-12 查找向量中的相同部分\r\n23.5 数值算法\r\n实例23-13 计算某数值与每个元素之和\r\n实例23-14 计算规定范围中元素的内积之和\r\n实例23-15 计算规定范围中元素的部分和\r\n实例23-16 计算规定范围中元素的相邻差\r\n\r\n第24章 指示器\r\n\r\n24.1 指示器简介\r\n24.2 输入指示器\r\n实例24-1 输入指示器的用法\r\n24.3 输出指示器\r\n实例24-2 输出指示器的用法\r\n24.4 前向指示器\r\n实例24-3 前向指示器的用法\r\n24.5 双向指示器\r\n实例24-4 双向指示器的用法\r\n24.6 随机访问指示器\r\n实例24-5 随机访问指示器的用法\r\n24.7 特殊用途指示器\r\n24.7.1 流指示器\r\n实例24-6 输入流指示器的用法\r\n实例24-7 输出流指示器的用法\r\n24.7.2 指示器适配器\r\n实例24-8 反向指示器的用法\r\n实例24-9 用指示器来覆盖数值\r\n实例24-10 用指示器插入数值\r\n\r\n第25章 C++异常处理\r\n\r\n25.1 C中的异常处理\r\n25.2 C++中的异常处理\r\n25.2.1 try块\r\n25.2.2 catch异常处理器\r\n25.2.3 throw语句\r\n25.2.4 try/throw/catch系列\r\n实例25-1 抛出并捕获异常\r\n实例25-2 多个catch处理模块\r\n25.2.5 异常情况指定\r\n25.2.6 不可预见的异常\r\n25.2.7 catch-all异常处理模块\r\n实例25-3 catch-all模块行为\r\n25.2.8 从处理模块中抛出异常\r\n实例25-4 重新抛出异常\r\n25.2.9 没有被捕获的异常\r\n实例25-5 未经捕获的异常\r\n实例25-6 捕获未经捕获的异常\r\n25.3 在抛出的异常中进行选择\r\n25.4 异常情况以及没有被释放的资源\r\n25.5 一个改进的计算器程序\r\n实例25-7 计算器\r\n第5单元练习\r\n\r\n第6单元 深入学习C++\r\n\r\n第26章 标准C++语言补充\r\n\r\n26.1 名字空间\r\n26.1.1 名字空间的介绍\r\n26.1.2 有关名字空间的成员\r\n实例26-1 std\r\n26.1.3 using namespace语句\r\n实例26-2 使用名字空间中定义的标识符\r\n实例26-3 using namespace语句的问题\r\n实例26-4 避开使用using namespace语句\r\n26.1.4 定义名字空间\r\n实例26-5 定义了各种类型变量和函数的名字空间\r\n26.1.5 嵌套名字空间\r\n实例26-6 嵌套\r\n26.1.6 无名名字空间\r\n26.1.7 名字空间的别名\r\n实例26-7 别名\r\n26.2 新风格类型转换\r\n26.2.1 动态类型转换\r\n实例26-8 向下转换指针\r\n实例26-9 用动态类型转换向下转换引用\r\n26.2.2 静态类型转换\r\n实例26-10 静态类型转换与C风格类型转换\r\n26.2.3 重新解释类型转换\r\n实例26-11 用空指针返回100个字符缓冲区的内存分配\r\n26.2.4 常类型转换\r\n实例26-12 计数器\r\n26.3 运行时类型信息\r\n实例26-13 检测typeid行为\r\n\r\n第27章 区域表示\r\n\r\n27.1 国际化元素\r\n27.2 std::locale类\r\n27.2.1 标准侧面\r\n27.2.2 默认区域表示与全局区域表示\r\n27.3 生成区域表示对象\r\n实例27-1 不同区域的日期显示\r\n27.4 生成混合区域表示\r\n实例27-2 日期混合显示\r\n27.5 流与区域表示\r\n实例27-3 imbue()函数\r\n27.6 操作侧面\r\n实例27-4 访问侧面\r\n第6单元练习\r\n\r\n第7单元 附录\r\n\r\n附录A 数值系统\r\n\r\nA.1 简介\r\nA.2 将二进制数简化为八进制和十六进制数\r\nA.3 将八进制和十六进制数转换为二进制数\r\nA.4 将二进制、八进制和十六进制数转换为十进制数\r\nA.5 将十进制数转换为二进制、八进制或十六进制数\r\nA.6 负二进制数:补码表示法\r\nA.7 知识点小结\r\n\r\n附录B 运算符的优先级与结合律\r\n附录C ASCII字符集\r\n附录D C与C++的区别\r\n\r\nD.1 返回值\r\nD.2 类型检查\r\nD.3 声明\r\nD.4 名字\r\nD.5 C++的一些优点\r\n\r\n附录E 标准C++特性总结\r\n\r\nE.1 新式头文件\r\nE.2 ANSI类型转换运算符\r\nE.3 模板与异常处理\r\nE.4 其他关键字\r\nE.5 if语句中变量的作用范围\r\nE.6 具有枚举类型的函数的重载\r\nE.7 嵌入类的前向引用\r\n\r\n附录F 标准异常\r\n附录G C++术语与概念\r\n\r\n第7单元 练习\r\n\r\n习题集\r\n练习答案