分类:C/C++
语言:简体中文
大小:未知
发布时间:13-03-16
内容简介: 本书以帮助读者掌握C++面向对象高效编程方法为目的,详细介绍了C++编程中的各种概念和应用技巧。全书共分为两部分,第一部分介绍面向对象编程的基础和应用,如数据抽象、继承、异常处理等内容;第二部分说明了如何建立抽象的概念及其策略,并研究了C++对象模型。书中带有大量的代码实例,使读者不仅能够从理论上得以提高,而且还能够轻松地在实践中应用。 本书适用于C++程序员,也可供对面向对象程序设计感兴趣的编程人员及大专院校计算机专业师生参考。 推荐理由: 记得在一本讲述程序员求职的书中谈到,在美国,程序员的工资是一般美国人工资的两倍,而 C++程序员比使用其他语言的程序员的工资更高。在中国不断与国际接轨的今天,学习并熟悉C++语言,不仅能够提高自己的工作技能,而且还是自己就业、求职以及获得高薪和更多机会的一条很好的途径。 本书的作者是经验丰富的C++程序员,在本书中,他分两部分介绍了在C++中高效编程的经验:在第一部分中,介绍有关面向对象编程的基础和应用,如数据抽象、继承、异常处理等内容;在第二部分中;说明如何建立抽象的概念及其策略,并研究了C++对象模型。内容截图:网盘网址:http://www.ctdisk.com/file/18142560
第一部分 概念、实践和应用第1章 什么是面向对象编程1.1 背景1.1.1 面向对象编程示例1.1.2 银行帐号的表示1.1.3 银行帐号的安全1.1.4 用面向对象编程方法解决问题1.2 理解对象模型1.3 术语1.4 理解消息、方法和实例变量1.4. 1 对象中包含的内容1. 4. 2 实例化(或创建)对象1.5 什么可以作为类1.6 什么不是类1.7 类的目的1.8 深入了解对象1.8.1 对象的状态1.8.2 对象状态的重要性1.8. 3 谁控制对象的状态1.8.4 对象的行为. 1.9 面向对象软件开发的阶段1.9.1 面向对象分析(00a)1.9.2 面向对象设计(00d)1.10 面向对象编程(oop)1.11 对象模型的关键元素1.12 oop范例和语言1.13 面向对象编程语言的要求1.14 对象模型的优点1.15 小结第2章 什么是数据抽象2.1 接口和实现的分离2.1.1 接口的含义2.2 对象接口的重要性2.2. 1 什么是充足的接口2.3 实现的含义2.4 保护实现2.5 数据封装的忧点2.6 接口、实现和数据封装之间的关系2.7 数据封装注意事项2.8 确定封装内容和时间2.9 抽象数据类型2. 10 抽象数据类型——堆栈的实现2. 11 c++中的数据抽象2.12 访问类中的区域2.13 和类一起使用的术语2. 14 类的实现者2. 15 实现成员函数2. 16 确定成员函数的目标对象2.17 程序示例2. 18 对象是重点2.19 对接口的再认识2. 20 什么是多线程安全类2.21 确保抽象的可靠性——类常量和断言2. 21.1 类常量2. 21.2 前提和后置条件2. 21.3 使用断言实现常量和条件2. 21. 4 高效使用断言2.22 表示oo设计的符号2. 23 booch符号2.24 类关系2. 24. 1 关联2.24. 2 聚合(有一个)2. 24. 3 “使用”关系2. 24.4 继承性关系(是一个)2. 24. 5 类的种类2.25 统一建模语言(uml)2.26 统一建模中的类关系2.27 关联2.27.1 作为聚合的关联2.27.2 or关联2. 28 组合2.29 生成关系(是一个)2. 30 “有一个”关系的重要性2.31 小结第3章 c+十与数据抽象3.1 类概念基础3.2 类元素细节3.2.1 访问区域3.2.2 分析3.3 复制构造函数3.3.1 访问对象的数据成员——c++模型3. 4 赋值运算符3.5 this指针和名称修正的进一步说明3. 6 const成员函数的概念3.7 编译器实现const成员函数的方式3.8 c++中类和结构的区别3.9 类可以包含什么3.10 设计期间的重点——类的接口3.11 类名、成员函数名、参数类型和文档3.12 参数传递模式——客户的视图3.13 采用语义3.14 为参数选择正确的模式3.15 函数返回值3.16 从函数中返回引用3.17 编写内存安全类3.17.1 改善性能3.18 客户对类和函数的责任3.19 小结第4章 oop中的初始化和无用单元搜集4. 1 什么是初始化4. 1.1 使用构造函数初始化4. 1.2 使用嵌入对象必须遵守的规则4. 2 无用单元收集问题4. 2.1 无用单元4. 2.2 悬挂引用4. 2.3 无用单元收集和悬挂引用的补救4.2. 4 无用单元收集和语言设计4. 2. 5 何时在c+十中产生无用单元4. 2.6 对象什么时候请求资源4.3 c++中的无用单元收集4.4 对象标识4. 5 对象复制的语义4. 5.1 简单复制操作的语义4. 6 对象赋值的语义4.6.1 左值运算赋值4. 7 对象相等的语义4. 7.1 对象相等和对象等价4. 8 为什么需要副本控制4. 8.1 信号量示例4. 8.2 许可证服务器例子4.8.3 字符串类示例4.9 分析4. 10 “写时复制”的概念4. 10.l 何时使用引用计数4.10.2 “写时复制”小结4.11 类和类型4. 12 小结第5章 继承的概念5.1 继承的基本知识5.2 “是一个”关系的含义5. 3 继承关系的效果5.3.1 直接和间接基类5.4 多态置换原则5.4. 1 初始化基类对象5.5 用继承扩展类层次5.6 继承的一些基本优点5.7 动态绑定、虚函数和多态性5.7.1 动态绑定含义5.7. 2 动态绑定的支持——虚函数5.8 继承对数据封装的影响5.9 多态的含义5.10 高效使用虚函数(动态绑定)5. 10.1 覆盖的概念5.11 虚析构函数的要求5.12 构造函数和虚函数5.13 一般一特殊概念5.14 抽象(延期)类概念5.15 抽象类的用途5.16 继承的威力5.17 有效的代码重用5.18 抽象基类的客户5.19 继承优点小结5.20 继承和动态绑定的危险5.20.1 c++实现动态绑定(虚函数)5.20.2 虚函数成本5.20.3 动态绑定和类型检查5.21 不必要的继承和动态绑定5. 21. 1 图书馆出借系统5. 22 使用虚函数的不同模式5.23 小结第6章 多重继承概念6.1 多重继承的简单定义6.2 大学例子6.2.1 改进后的代码重用6.3 多重继承关系的含义6.4 mi情况6.4.1 c++中解决名称冲突6.4. 2 二义性基类问题6.5 多重继承的基本优点6.6 多重继承的替换方法6.6. 1 第一种替换方法6.6.2 第二种情况6.7 重复继承6.8 重复继承的解决方案6.8.1 在c+十中利用虚基类共享对象6.8.2 虚基类的优点6.8.3 虚基类产生的新问题6.8.4 比较eiffel和 c++中的mi6.9 继承的一般问题6.10 使用mixin类加入静态功能6. 10.1 mixin类的定义6.10.2 何时使用mixin类6.11 动态变化情况的设计6.11.1 角色扮演类的设计灵活性6.11.2 使用角色扮演类6.11.3 管理角色的另一种方法6.11.4 tuniversitymember对象的多态用法6. 11.5 对现存类的必须改动6.11.6 mixin类和角色对象的比较——适用性6.12 c++的私有派生6.12.1 何时使用私有派生6.12.2 重新导出私有基类的成员6.12. 3 私有派生的替换方法——包含6.12.4 私有派生的需求6.13 mixin类和私有派生的实用示例6.14 继承和包含6. 15 小结第7章 从类中选择性导出(友元函数)7.1 需要什么7.2 c++的情况7.3 友元关系的含义7.4 非成员函数和友元函数的应用7.4. 1 实例1:尽量减少类之间过多的相互影响7.4.2 实例2:克服语法问题7.4. 3 实例3:需要和多个类进行通信的函数7.5 非成员函数的优点7.6 选择友元函数还是成员函数7.7 小结第8章 运算符重载的概念8.1 语言类型和程序员定义类型的差别8.2 什么是重载运算符8.3 为什么需要运算符重载——优缺点8.3.1 更加优秀的抽象数据类型8.3.2 令人费解的运算符重载8.3.3 无法理解优先级和结合规则8.4 c++中的重载运算符8.5 ++和——运算符的另一个应用8.5.1 下标运算符: operator[]8.6 更复杂的运算符——成员访问运算符:→8.7 非成员函数的运算符8.7.1 作为成员函数的运算符8.7.2 作为非成员函数实现的运算符8.7.3 为什么需要转换8.8 转换函数8.8.1 转换构造函数和转换函数之间的相互影响8.8.2 减少对临时对象的需求8.9 从运算符函数返回结果8.10 赋值运算符8.11 小结第9章 通用类型9.1 重复性编码问题9.2 聪明的解决方案——通用编程9.3 通用类型(类)基础9.3.1 在c++中实例化新模板类时发生的事情9.4 通用类型和代码复制9.5 通用类实现者和客户之间的协议9.5. 1 这是否是良好的设计9.5.2 通用类实现中的运算符和成员函数9.5.3 替换解决方案——通用类的特殊化9.6 模板特殊化9.6.1 特殊化模板成员函数9.6.2 另一种方法:从对象中分离比较9.6.3 不能特殊化某个模板成员函数的情况9.7 模板类特殊化9.8 通用函数的概念9.9 c++中模板类和成员函数的实例化9.10 通用类型和类型检查9.11 限制和无限制通用性9.11.1 c++中对模板参数的限制9.11.2 c++中模板参数的特定类型9.11.3 模板参数的默认值9.12 c++模板参数的限制9.13 通用类和选择性导出9.14 继承和通用类9.14.1 多态性和通用类9.15 通用类继承的用途9.15.1 单独方法9.16 控制对象创建的通用技术9.17 实现计数指针9.18 用模板对象尽量减少代码复制9.18.1 程序的内存覆盖区9.18.2 减少模板代码的方法9.19 模板类和源代码保护9.20 共享(动态)库中的模板类9.20.1 共享库中的模板类——多实例问题9.20.2 消除共享库中的多个实例9.20.3 和现存共享库链接9.20.4 容器类9.21 通用类和继承的比较9.22 小结第10章 处理异常情况10.1 处理错误情况的原因10.1.1 错误码有什么错误10.2 什么是替换方法10.3 c++异常处理模型10.3.1 c++异常机制的工作方式10. 3.2 try块的重要性10.3.3 throw表达式的重要性10.3.4 理解动态调用链10.3.5 处理多个异常10.3.6 捕获块的责任10.4 eiffel中的异常模型10.5 eiffel和c++异常模型的优缺点10.6 高效使用c++异常10.7 创建异常层次结构10.7.1 捕获处理程序的顺序10.7.2 编写异常安全函数10.8 在工程中设计异常处理10.8.1 何时引发异常10.9 工程中成功的错误管理策略10.9.1 函数并不是防火墙10.9.2 设计异常层次结构10.10 异常环境中的资源管理10.10.1 自动资源管理10.10.2 推广资源管理解决方案10.11 异常和构造函数10.11.1 从函数中返回安全资源10.11.2 管理对象数组的辅助类10.11.3 自动无用单元搜集的代价10.12 构造函数的部分完成10.13 用异常创建安全的数组10.14 小结第二部分 建立强大的面向对象软件第11章 掌握数据抽象11.1 隐藏抽象的实现细节11.1.1 使用句柄的优点11.1.2 使用句柄的缺点11.2 作为数据成员使用指针(惰性计算)11.3 控制对象的创建11.3.1 只允许使用 new()运算符创建对象11.3.2 防止用 new()运算符创建对象11.4 使用指针和引用代替嵌入对象11.5 避免用大型数组作为自动变量(或者数据成员)11.6 使用对象数组和对象指针数组11.7 对于数据成员和成员函数的返回值,首选对象,而不是简单类型的指针11.8 与c的兼容性11.9 注意实现的选择:对象大小和代码效率11.10 避免临时对象11.11 使用复制构造函数初始化对象11.12 有效使用代理对象11.12.1 有助于对象的安全共享的代理对象11.12.2 为方便使用的代理对象11.12. 3 作为远程对象替身的代理对象11.12.4 提供其他功能的智能代理对象11.12.5 解决语法/语义问题的代理11.12.6 通用下标代理技术11.13 使用简单的抽象建立更复杂的抽象11.14 抽象必须允许客户用各种不同的方式使用类11.15 小结第12章 高效使用继承12.1 用继承实现优秀的菜单和命令12.1.1 支持不同的菜单类型12.2 封装对象创建细节12.3 虚拟构造函数的概念12.4 为协议控制而组合使用虚函数和非虚函数12.5 双重调度概念12.6 设计和实现容器类12.7 设计处理不同的容器12.8 用通用性编程实现同类容器类12.8.1 设计目的12.8.2 基于模板的同类容器的优点12.9 基于模板的容器的缺点12.9.1 用基于指针的同类容器实现异类容器12.10 导航容器12. 10.1 被动迭代器12.11 主动迭代器12.11.1 迭代器对象12.12 管理集合和迭代器——客户的角度12.12.1 样式1:创建并从容器返回迭代器以便于用户使用12.12.2 样式2:按值返回一个用户可以使用迭代器控制的容器12.13 c++标准模板库(stl)12.13.1 stl容器12.13.2 迭代器12.13.3 stl中的算法12.14 小结12.15 tarray容器的实现代码第13章 理解c+十对象模型13.1 高效实现13.2 c++表示对象的方式13.2.1 没有任何虚函数的类13.2.2 成员函数13.2.3 静态数据成员13. 2.4 构造函数13.3 包含虚函数的类13.3.1 vtbl指针的布局13.4 在共享库之间共享虚函数表13.5 虚函数和多重继承(非虚基类)13.6 虚拟基类13.6.1 虚基类的成员访问13.6.2 带有虚函数的虚基类13.7 rtti的实现支持(运行时类型确认)13.8 基于对象和面向对象编程13. 9 引用、指针和值13.9.1 引用和指针的赋值13.9.2 复制构造函数13.9.3 构造函数的责任13.10 复制构造函数的责任13.11 对象的按值传递和按值返回的优化13. 11.1 按值传递13.11.2 按值返回13.12 运行时初始化13.13 小结附录aa.1 名称空间特性a.1.1 using声明a.1.2 using指令a. 1.3 std名称空间参考书目和推荐读物
...