C++高级编程

C++高级编程
作 者: Nicholas Solter Scott Kleper 刘鑫 杨健康 刘鑫
出版社: 机械工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: C++
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  NicholasA.Solter现就职于SunMicrosystems公司,曾在斯坦福大学攻读计算机科学专业,获得理学学士和理学硕士学位。他具有丰富的C/C++编程经验和计算机游戏开发经历,并作为助理教授在Fullerton学院讲授过一年C++课程。ScottJ.KleperReactivity公司的高级软件工程师。在初中就开始了他的编程生涯,用BASIC为TandyTRS-80编写过一些冒险游戏。在斯坦福大学就读期间,他担任过程序设计入门和面向对象程序设计等多门课程的助教;并获得了计算机科学的理学学士和硕士学位。毕业后致力于人机交互领域,担任过多家公司开发小组的首席工程师。

内容简介

本书既系统全面又突出重点,作者从C++基础知识讲起,始终着眼于C++语言的编程实践,提供了大量实践示例和解决方案,包括如何更好地实现重用、如何有效地测试和调试等C++专业人员常用的一些技术与方法,还提供了一些鲜为人知的、能大大简化工作的C++语言特性;最后,还配有大量可重用的编码模式,并在附录中提供C++面试宝典作为开发人员的实用指南。本书面向进阶C++的初学者,以及那些想把C++水平提高到专业水准的程序员和开发人员。本书主要内容:● 不同的编程方法和高质量的编程风格● 充分利用C++完成大型软件开发的各种方法● 确保无错代码的方法● 认识面向对象设计● 使用库和模式来提高编程效率、提高编程质量的若干方法● C++中管理内存的最佳方法● 输入/输出技术

图书目录

译者序

前言

作者简介

第一部分专业C+十程序设计概述

第1章C++快速入门.

1.1C++基础

1.1.1必不可少的"Hello,World"

1.1.2命名空间

1.1.3变量

1.4操作符

1.1.5类型

1.1.6条件语句

1.1.7循环

1.1.8数组

1.1.9函数

1.1.10结束语

1.2C++进阶

1.2.1指针和动态内存

1.2.2C++中的字符串

1.2.3引用

1.2.4异常

1.2.5const的多重用途

1.3作为一种面向对象语言的C++

1.4你的第一个实用的C十十程序

1.4,1一个员工记录系统

1.4.2Employee类

1.4.3Database类

1.4.4用户界面

1.4.5对程序的评价

1.5小结

第2章设计专业的C++程序

2.2编程设计的重要性

2.3C++设计有什么不同之处

2.4C++设计的两个原则

2.4.1抽象

2.4.2重用

2.5设计一个象棋程序

2.5.1需求

2.5.2设计步骤

2.6小结

第3章基于对象的设计

3.1面向对象的世界观

3.1.1我是在以过程性思维思考吗

3.1.2面向对象思想

3.1.3身处对象世界中

3.1.4对象关系

3.1.5抽象

3.2小结

第4章基于库和模式的设计

4.1重用代码

4.1.1有关术语

4.1.2决定是否重用代码

4.1.3重用代码的策略

4.1.4捆绑第三方应用

4.1.5开源库

4.1.6C++标准库

4.2利用模式和技术完成设计

4.2.1设计技术

4.2.2设计模式

4.3小结

第5章重用设计

5.1重用方法论

5.2如何设计可重用的代码

5.2.1使用抽象

5.2.2适当地建立代码结构以优化

重用

5.2.3设计可用的接口

5.2.4协调一般性和易用性

5.3小结

第6章充分利用软件工程方法

6.1为什么需要过程

6.2软件生命期模型

6.2.1分阶段模型和瀑布模型

6.2.2螺旋方法

6.2.3统一开发过程

6.3软件工程方法论

6.3.1极限编程(XP)

6.3.2软件triage

6.4建立自己的过程和方法论

6.4.1以开放的心态接纳新思想

6.4.2汇总新思想

6.4.3明确哪些可行,哪些不可行

6.4.4不要做叛逃者

6.5小结

第二部分编写C++代码方式

第7章好的编码风格

7.1为什么代码看上去要好

7.1.1提前考虑

7.1.2保持清晰

7.1.3好的代码风格包括哪些因素

7.2为代码加注释

7.2.1写注释的原因

7.2.2注释风格

7.2.3本书中的注释

7.3分解

7.3.1通过重构来分解

7.3.2根据设计来分解

7.3.3本书中的分解

7.4命名

7.4.1选择一个好名字

7.4.2命名约定

7.5合理地使用语言特性

7.5.1使用常量

7.5.2利用const变量

7.5.3使用引用而不是指针

7.5.4使用定制异常

7.6格式化

7.6.1有关大括号对齐的争论

7.6.2考虑空格和小括号

7.6.3空格和制表符

7.7风格方面的难题

7.8小结

第8章掌握类和对象

8.1电子表格示例

8.2编写类

8.2.1类定义

8.2.2定义方法

8.2.3使用对象

8.3对象生命期

8.3.1对象创建

8.3.2对象撤销

8.3.3对象赋值

8.3.4区别复制和赋值

8.4小结

第9章精通类和对象

9.1对象中的动态内存分配

9.1.1Spreadsheet类

9.1.2用析构函数释放内存

9.1.3处理复制和赋值

9.2不同类型的数据成员

9.2.1静态数据成员

9.2.2const数据成员

9.2.3引用数据成员

9.2.4const引用数据成员

9.3深入了解方法

9.3.1静态方法

9.3.2const方法

9.3.3方法重载

9.3.4默认参数

9.3.5内联方法

9.4嵌套类

9.5友元

9.6操作符重载

9.6.1实现加法

9.6.2重载算术操作符

9.6.3重载比较操作符

9.6.4利用操作符重载构建类型

9.7方法和成员指针

9.8构建抽象类

9.9小结

第10章探索继承技术

10.1使用继承构建类

10.1.1扩展类

10.1.2覆盖方法

10.2继承以实现重用

10.2.1类WeatherPrediction

10.2.2在子类中增加功能

10.2.3在子类中进行功能替换

10.3考虑父类

10.3.1父构造函数

10.3.2父析构函数

10.3.3引用父类的数据

10.3.4向上类型强制转换和向下类型

强制转换

10.4继承以实现多态

10.4.1Spreadsheet的返回结果

10.4.2设计多态电子表格单元格

10.4.3电子表格单元格的基类—

10.4.4各个子类

10.4.5充分利用多态

10.4.6将来的考虑

10.5多重继承

10.5.1从多个类继承

10.5.2命名冲突与二义基类

10.6继承技术中有趣而隐蔽的问题

10.6.1改变覆盖方法的特性

10.6.2覆盖方法的特殊情况

10.6.3复制构造函数与相等操作符

10.6.4关键字virtual的真相

10.6.5运行时类型工具

10.6.6非公共继承

10.6.7虚基类

10.7小结

第11章利用模板编写通用代码

11.1模板概述

11.2类模板

11.2.1编写类模板

11.2.2编译器如何处理模板

11.2.3模板代码在文件之间的分布

11.2.4模板参数

11.2.5方法模板

11.2.6模板类特殊化

11.2.7从模板类派生子类

11.2.8继承与特殊化的区别

11.3函数模板

11.3.1函数模板特殊化

11.3.2函数模板的重载

11.3.3类模板的友元函数模板

11.4高级模板

11.4.1关于模板参数的更多知识

11.4.2模板类的部分特殊化

11.4,3用重载模板函数部分特殊化

11.4.4模板递归

11.5小结

第12章理解C++疑难问题

12.1引用

12.1.1引用变量

12.1.2引用数据成员

12.1.3引用参数

12.1.4引用返回类型

12.1.5采用引用还是指针

12.2关键字疑点

12.2.1关键字const

12.2.2关键字static

12.2.3非局部变量的初始化顺序

12.3类型与类型强制转换

12.3.1typedef

12.3.2类型强制转换

12.4解析作用域

12.5头文件

12.6C实用工具

12.6.1变量长度参数列表

12.6.2预处理宏

12.7小结第三部分掌握C++高级特性

第13章有效的内存管理

13.1使用动态内存

13.1.1如何描述内存

13.1.2内存的分配与撤销

13.1.3数组

13.1.4使用指针

13.2数组与指针的对应

13.2.1数组即指针

13.2.2指针并非都是数组

13.3动态字符串

13.3.1C风格的字符串

13.3.2字符串直接量

13.3.3C++的字符串类

13.4低级的内存操作

13,4.1指针运算

13.4.2自定义内存管理

13.4.3垃圾回收

13.4.4对象池

13.4.5函数指针

13.5常见的内存陷阱

13.5.1字符串空间分配不足

13.5.2内存泄漏

13.5.3二次删除与无效指针

13.5.4访问越界指针

13.6小结..

第14章揭开C++I/O的神秘

面纱

14.1使用流

14.1.1到底什么是流

14.1.2流的源与目的

14.1.3流输出

14.1.4流输入

14.1.5输入与输出对象

14.2字符串流

14.3文件流

14.3.1使用seek()与tell()

14.3.2链接流

14.4双向I/O

14.5国际化

14.5.1宽字符

14.5.2非西方字符集

14.5.3本地化环境与方面

14.6小结

第15章处理错误

15.1错误和异常

15.1.1到底什么是异常

15.1.2C++中的异常为什么好

15.1.3C++中的异常为什么不好

15.1.4我们的建议

15.2异常机制

15.2.1抛出和捕获异常

15.2.2异常类型

15.2.3抛出和捕获多个异常

15.2.4未捕获的异常

15.2.5抛出列表

15.3异常和多态

15.3.1标准异常层次体系

15.3.2按类层次捕获异常

15.3.3编写自己的异常类

15.4栈展开和清除

15.4.1捕获.清除和重新抛出

15.4.2使用智能指针

15.5常见的错误处理问题

15.5.1内存分配错误

15.5.2构造函数中的错误

15.5.3析构函数中的错误

15.6综合

15.7小结

第四部分确保无错代码

第16章重载C++操作符

16.1操作符重载概述

16.1.1为什么要重载操作符

16.1.2操作符重载的限制

16.1.3操作符重载中的选择

16.1.4不应重载的操作符

16.1.5可重载操作符小结

16.2重载算术操作符

16.2.1重载一元减和一元加

16.2.2重载自增和自减

16.3重载位操作符和二元逻辑操作符

16.4重载插入和析取操作符

16.5重载下标操作符

16.5.1利用operator[]提供只读

访问

16.5.2非整数数组索引

16.6重载函数调用操作符

16.?重载解除引用操作符

16.7.1实现operator

16.7.2实现operator一>

16.7.3到底什么是operator一>

16.8编写转换操作符

16.8.1转换操作符的二义性问题

16.8.2布尔表达式的转换

16.9重载内存分配和撤销操作符

16.9.1new和delete究竟如何工作

16.9.2重载operatornew和operatordelete

16.9.3重载带额外参数的operatornew和operatordelete

16.10小结

第17章编写高效的C++程序

17.1性能和效率概述

17.1.1实现高效的两种方法

17.1.2两类程序

17.1.3C++是一种低效语言吗

17.2语言级效率

17.2.1高效地处理对象

17.2.2不要过度使用高开销的语言特性

17.2.3使用内联方法和函数

17.3设计级效率

17.3.1尽可能缓存

17.3.2使用对象池

17.3.3使用线程池

17.4测评分析

17.5小结

第18章开发跨平台和跨语言的应用

18.1跨平台开发

18.1.1体系结构问题

18.1.2实现问题

18.1.3特定于平台的特性

18.2跨语言开发

18.2.1混合C和C++

18.2.2转换模式

18.2.3与C代码的链接

18.2.4利用JNI混合Java和C++

18.2.5C++与Peri和Shell脚本的混合

18.2.6C++与汇编代码的混合

18.3小结

第19章熟练地测试

19.1质量控制

19.1.1谁来负责测试

19.1.2bug的生命期

19.1.3bug跟踪工具

19.2单元测试

19.2.1单元测试的方法

19.2.2单元测试过程

19.2.3实战单元测试

19.3高级测试

19.3.1集成测试

19.3.2系统测试

19.3:3回归测试

19.4成功测试的提示

19.5小结

第20章征服调试

20.1调试基本法则

20.2bug分类

20.3避免bug

20.4找出bug的方法

20.4.1错误日志

20.4.2调试轨迹

20.4.3断言

20.5调试技术

20.S.1再生bug

20.5.2调试可再生bug

20.5.3调试不可再生bug

20.5.4调试内存问题

20.5.5调试多线程程序

20.5.6调试示例:文章引用

20.5.7从ArticleCitations示例学到的教训

20.6小结

第21章深入STL:容器和迭代器

21,1容器概述

21.1.1元素需求

21.1.2异常和错误检查

21.1.3迭代器

21.2顺序容器

21.2.1vector

21.2.2vectOr特殊化

21.2.3deque

21.2.4list

21.3容器适配器

21.3.1queue

21.3.2priority_queue

2L3.3stack

21.4关联容器

21.4.1pair工具类

21.4.2map

21.4.3multimap

21,4.4set

21.4.5multiset

21.5其他容器

21.5.1数组作为STL容器

21.5.2string作为STI容器

21.5.3流作为STL容器

21.5.4bitset

21.6小结

第五部分使用库和模式

第22章掌握STL算法和函数对象

22.1算法概述

22.1.1find()和find—汀()算法

22.1.2accumulate()算法

22.2函数对象

22.2.1算术函数对象

22.2.2比较函数对象

22.2.3逻辑函数对象

22.2.4函数对象适配器

22.2.5编写自己的函数对象

22.3算法细节

22.3.1工具算法

22.3.2非修改算法

22.3.3修改算法

22.3.4排序算法

22.3.5集合算法

22.4算法和函数对象示例:选民注册审计

22.4.1选民注册审计问题描述

22.4.2auditVoterRolls()函数

22.4.3getDuplicates()函数

22.4.4RemoveNames函数对象

22.4.5NamelnList函数对象

22.4.6测试auditVoterRolls()函数

22.5小结

第23章定制和扩展STL

23.1分配器

23.2迭代器适配器

23.2.1逆序迭代器

23.2.2流迭代器

23.2.3插入迭代器

23.3扩展STL

23.3.1为什么要扩展STL

23.3.2编写STL算法

23.3.3编写一个STL容器

23.4小结

第24章探讨分布式对象

24.1分布式计算的魅力

24.1.1分布以获得可扩展性

24.1.2分布以获得可靠性

24.1.3分布以获得集中性

24.1.4分布式内容

24.1.5分布式vs网络式

24.2分布式对象

24.2.1串行化和编组

24.2.2远程过程调用

24.3CORBA

24.3.1接口定义语言—

24.3.2实现类

24.3.3使用对象

24.4XML

24.4.1XML陕速入门

24.4.2XML作为一种分布式对象技术.

24.4.3用C++生成和解析XML

24.4.4XML验证

24.4.5用XML构建分布式对象

24.4.6SOAP(简单对象访问协议)

24.5小结

第25章结合技术和框架

25.1“我想不起来如何”

25.1.1编写一个类

25.1.2派生一个现有类

25.1.3抛出和捕获异常

25.1.4读文件

25.1.5写文件

25.1.6编写模板类

25.2还有更好的办法

25.2.1带引用计数的智能指针

25.2.2双重分派

25.2.3混合类

25.3面向对象框架

25.3.1使用框架

25.3.2模型—视图—控制器模式

25.4小结

第26章应用设计模式

26.1单例模式

26.1.1举例:日志机制

26.1.2单例的实现

26.1.3使用单例

26.2工厂模式

26.2.1举例:汽车工厂模拟

26.2.2实现工厂

26.2.3使用工厂

26.2.4工厂的其他使用

26.3代理模式

26.3.1举例:隐藏网络连通性问题

26.3.2实现代理

26.3.3使用代理

26.4适配器模式

26.4.1举例:适配一个XML库

26.4.2适配器的实现

26.4.3使用适配器

26.5装饰器模式

26.5.1举例:定义网页中的样式

26.5.2装饰器的实现

26.5.3使用装饰器

26.6职责链模式

26.6.1举例:事件处理

26.6.2职责链的实现

26.6.3使用职责链

26.7观察者模式

26.7.1举例:事件处理

26.7.2实现观察者

26.7.3使用观察者

26.8小结

附录

附录AC++面试宝典

附录B参考书目...