目录 第1章初识C++1 1.1C++简介1 1.1.1C++发展史1 1.1.2C++应用领域3 1.2C++程序集成开发环境3 1.2.1Code::Blocks简介4 1.2.2Code::Blocks环境设置4 1.3C++程序设计基本过程6 1.4第一个程序8 1.4.1C++程序基本结构8 1.4.2使用名称空间12 小结16 第2章预备知识17 2.1数据类型17 2.1.1整数类型17 2.1.2宽字符类型18 2.1.3布尔类型18 2.1.4类型转换19 2.2变量声明及初始化22 2.2.1auto类型说明22 2.2.2关键字decltype23 2.2.3列表初始化24 2.3数组的替代方案25 2.3.1向量vector25 2.3.2类模板array27 2.4字符串string32 2.4.1定义string字符串32 2.4.2string的常用操作32 2.5指针与引用362.5.1new与delete运算符37 2.5.2引用运算符42 2.6基于范围的for循环45 2.7函数剖析46 2.7.1引用作为函数参数46 2.7.2函数重载51 2.7.3默认参数55 2.7.4内联函数58 小结59 第3章类与对象60 3.1面向对象程序设计60 3.1.1面向对象与面向过程的区别60 3.1.2面向对象的基本概念61 3.2类的定义61 3.2.1成员的访问控制63 3.2.2数据的封装64 3.2.3成员函数的实现64 3.3使用类65 3.3.1创建对象65 3.3.2访问对象的成员68 3.3.3this指针69 3.4构造函数71 3.4.1默认构造函数71 3.4.2自定义无参构造函数71 3.4.3自定义带参数的构造函数73 3.4.4委托构造函数75 3.4.5含有对象成员的构造函数77 3.4.6默认参数的构造函数79 3.5析构函数83 3.6拷贝构造函数85 3.6.1拷贝构造函数的触发时机85 3.6.2深拷贝与浅拷贝89 3.7对象数组94 3.8数据共享96 3.8.1静态数据成员96 3.8.2静态成员函数98 3.9数据保护99 3.9.1常数据成员100 3.9.2静态常数据成员102 3.9.3常成员函数102 3.9.4常对象103 3.10类的友元105 3.10.1友元函数105 3.10.2友元类110 小结111 第4章运算符重载112 4.1运算符重载的概念112 4.1.1运算符重载的基本格式115 4.1.2运算符重载的基本规则115 4.2运算符重载方式116 4.2.1重载为类的成员函数116 4.2.2重载为类的友元函数118 4.2.3重载为成员函数与友元函数的探讨120 4.3常用运算符的重载122 4.3.1输入/输出运算符的重载122 4.3.2赋值运算符的重载125 4.3.3关系运算符的重载128 4.3.4下标运算符的重载129 4.3.5函数调用运算符的重载133 4.4类的转换134 4.4.1类型转换构造函数134 4.4.2类型转换函数136 小结138 第5章类继承139 5.1继承的概念139 5.2继承方式142 5.2.1公有继承142 5.2.2私有继承145 5.2.3保护继承146 5.3改造派生类147 5.3.1派生类构造函数147 5.3.2继承基类构造函数149 5.3.3派生类析构函数151 5.3.4隐藏基类成员153 5.4多重继承156 5.4.1声明多重继承156 5.4.2多重继承中派生类构造函数158 5.4.3多重继承引起的二义性160 5.4.4虚基类163 小结168 第6章多态169 6.1多态的概念169 6.1.1静态多态169 6.1.2动态多态170 6.2指针和引用类型的兼容性170 6.3虚函数172 6.3.1虚成员函数172 6.3.2虚析构函数177 6.4纯虚函数与抽象类180 6.4.1纯虚函数180 6.4.2抽象类181 小结183 第7章模板184 7.1函数模板184 7.1.1函数模板的实例化186 7.1.2函数模板的显式具体化189 7.1.3函数模板的重载192 7.1.4函数版本的选择194 7.1.5函数模板返回值的类型199 7.1.6函数模板小结201 7.1.7可变参数函数模板203 7.2类模板206 7.2.1类模板的声明206 7.2.2类模板的成员函数实现207 7.2.3类模板的实例化208 7.2.4类模板的显式具体化210 7.2.5类模板的模板参数213 7.2.6类模板和友元函数216 7.2.7类模板的继承与派生223 小结224第8章标准模板库225 8.1标准模板库简介225 8.2序列容器225 8.2.1vector226 8.2.2deque231 8.2.3list232 8.3容器适配器241 8.3.1stack241 8.3.2queue242 8.3.3priority_queue244 8.4关联容器245 8.4.1set/multiset246 8.4.2map/multimap250 8.4.3unordered_set/unordered _multiset 254 8.4.4unordered_map/unordered _multimap 256 8.5迭代器258 8.5.1使用迭代器的原因258 8.5.2迭代器的分类259 8.5.3迭代器函数260 8.6函数对象263 8.6.1预定义函数对象264 8.6.2自定义函数对象266 8.6.3lambda函数270 8.7算法272 8.7.1算法概述272 8.7.2常用算法272 小结277 第9章输入/输出流278 9.1输入/输出流概述278 9.2使用cout输出数据280 9.2.1“<<”运算符280 9.2.2刷新输出流281 9.2.3使用成员函数282 9.2.4控制输出格式283 9.3使用cin输入数据289 9.3.1“>>”运算符289 9.3.2流状态291 9.3.3使用成员函数293 9.4文件操作295 9.4.1文件流296 9.4.2文件读/写299 9.5字符串流309 小结313 第10章异常与断言314 10.1异常处理机制315 10.2异常处理机制的剖析318 10.3异常类322 10.4重抛异常328 10.5exception类331 10.6断言与静态断言334 小结336 参考文献337