书籍详情
C++编程思想
作者:(美)[B.埃克尔]Bruce Eckel著;刘宗田等译;刘宗田译
出版社:机械工业出版社
出版时间:2000-01-01
ISBN:9787111071167
定价:¥39.00
购买这本书可以去
内容简介
本书作者根据自己学习C++的亲身体会及多年教学经验,用简单的例子和简练的叙述讲解C++编程,别具特色。全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚函数、模板和包容器类、多重继承、异常处理和运行时类型识别。本书作为正式教材和自学用书均非常优秀,作为程序设计者的参考用书亦极为合适。
作者简介
作者:BruceEckelBruceEckel从1986年至今,已经发表了超过150篇计算机技术文章,出版了6本书(其中4本是关于C++的),并且在全世界做了数百次演讲。他是《ThinkinginJava》、《ThinkinginC++》、《C++Inside&Out》《UsingC++》和《ThinkinginPatterns》的作者,同时还是《BlackBeltC++》文集的编辑。他的《ThinkinginC++》一本书在1995年被评为“最佳软件开发图书”,《ThinkinginJava》被评为1999年JavaWorld“最爱读者欢迎图书”,并且赢得了编辑首选图书奖。C++编程思想第2卷:实用编程技术>>更多作品
目录
译者序
前言
第1章 对象的演化
1.1 基本概念
1.1.1 对象:特性+行为
1.1.2 继承:类型关系
1.1.3 多态性
1.1.4 操作概念:OOP程序像什么
1.2 为什么C++会成功
1.2.1 较好的C
1.2.2 采用渐进的学习方式
1.2.3 运行效率
1.2.4 系统更容易表达和理解
1.2.5 “库”使你事半功倍
1.2.6 错误处理
1.2.7 大程序设计
1.3 方法学介绍
1.3.1 复杂性
1.3.2 内部原则
1.3.3 外部原则
1.3.4 对象设计的五个阶段
1.3.5 方法承诺什么
1.3.6 方法应当提供什么
1.4 起节:最小的方法
1.4.1 前提
1.4. 2 高概念
1.4.3 论述(treatment)
1.4.4 结构化
1.4.5 开发
1.4.6 重写
1.4. 7 逻辑
1.5 其他方法
1.5.1 Booch
1.5.2 责任驱动的设计(RDD)
1.5.3 对象建模技术(OMT)
1.6 为向OOP转变而采取的策略
1.6.1 逐步进入OOP
1.6. 2 管理障碍
1.7 小结
第2章 数据抽象
2.1 声明与定义
2.2 一个袖珍C库
2.3 放在一起:项目创建工具
2.4 什么是非正常
2.5 基本对象
2.6 什么是对象
2.7 抽象数据类型
2.8 对象细节
2.9 头文件形式
2.10 嵌套结构
2.11 小结
2.12 练习
第3章 隐藏实现
3.1 设置限制
3.2 C++的存取控制
3. 3 友元
3.3.1 嵌套友元
3.3.2 它是纯的吗
3.4 对象布局
3. 5 类
3.5.1 用存取控制来修改stash
3.5.2 用存取控制来修改stack
3.6 句柄类(handle classes)
3.6. 1 可见的实现部分
3.6. 2 减少重复编译
3.7 小结
3.8 练习
第4章 初始化与清除
4. 1 用构造函数确保初始化
4. 2 用析构函数确保清除
4.3 清除定义块
4. 3.1 for循环
4.3.2 空间分配
4.4 含有构造函数和析构函数的stash
4.5 含有构造函数和桥构函数的stack
4. 6 集合初始化
4. 7 缺省构造函数
4.8 小结
4. 9 练习
第5章 函数重载与缺省参数
5.1 范围分解
5.1.1 用返回值重载
5. 1.2 安全类型连接
5. 2 重载的例子
5.3 缺省参数
5.4 小结
5.5 练习
第6章 输入输出流介绍
6. 1 为什么要用输入输出流
6. 2 解决输入输出流问题
6. 2.1 预先了解操作符重载
6.2.2 插入符与提取符
6. 2.3 通常用法
6. 2.4 面向行的输入
6. 3 文件输入输出流
6.4 输入输出流缓冲
6.5 在输人输出流中查找
6.6 strstreams
6.6. 1 为用户分配的存储
6.6.2 自动存储分配
6.7 输出流格式化
6.7.1 内部格式化数据
6. 7.2 例子
6. 8 格式化操纵算子
6.9 建扩操纵算子
6.10 输入输出流实例
6.10.1 代码生成
6.10.2 一个简单的数据记录
6. 11 小结
6. 12 练习
第7章 常量
7. 1 值替代
7.1.1 头文件里的const
7. 1. 2 const的安全性
7.1.3 集合
7.1.4 与C语言的区别
7. 2 指针
7.2.1 指向const的指针
7.2.2 const指针
7.2.3 赋值和类型检查
7.3 函数参数和返回值
7.3.1 传递const值
7.3.2 返回const值
7.3.3 传递和返回地址
7. 4 类
7.4.1 类里的const和enum
7.4. 2 编译期间类里的常量
7. 4. 3 const对象和成员函数
7.4. 4 只读存储能力
7.5 可变的(Volatile)
7.6 小结
7. 7 练习
第8章 内联函数
8.1 预处理器的缺陷
8.2 内联函数
8.2.1 类内部的内联函数
8.2.2 存取函数
8.3 内联函数和编译器
8.3.1 局限性
8.3.2 赋值顺序
8.3.3 在构造函数和桥构因数里隐藏行为
8.4 减少混乱
8.5 预处理器的特点
8.6 改进的错误检查
8.7 小结
8.8 练习
第9章 命名控制
9.1 来自C语言中的静态成员
9.1.1 函数内部的静态变量
9.1.2 控制连接
9.1.3 其他的存储类型指定符
9.2 名字空间
9.2.1 产生一个名字空间
9.2. 2 使用名字空间
9.3 C++中的静态成员
9.3.1 定义静态数据成员的存储
9.3.2 嵌套类和局部类
9.3.3 静态成员国数
9.4 静态初始化的依赖因素
9.5 转换连接指定
9.6 小结
9.7 练习
第10章 引用和拷贝构造函数
10.1 C++中的指针
10.2 C++中的引用
10.2.1 函数中的引用
10.2.2 参数传递准则
10.3 拷贝构造函数
10.3.1 传值方式传递和返问
10.3.2 拷贝构造函数
10.3.3 缺省拷贝构造函数
10.3.4 拷贝构造国数方法的选择
10.4 指向成员的指针(简称成员指针)
10.5 小结
10.6 练习
第11章 运算符重载
11.1 警告和确信
11.2 语法
11.3 可重载的运算符
11.3.1 一元运算符
11.3.2 二元运算符
11.3.3 参数和返回值
11.3. 4 与众不同的运算符
11.3.5 不能重载的运算符
11.4 非成员运算符
11.5 重载赋值符
11.6 自动类型转换
11.6.1 构造国数转换
11. 6.2 运算符转换
11.6.3 一个样想的例子:Strings
11.6. 4 自动类型转换的缺陷
11.7 小结
11.8 练习
第12章 动态对象创建
12.1 对象创建,
12.1. 1 C从堆中获取存储单元的方法
12.1.2 运算符new
12.1.3 运算符delete
12.1.4 一个简单的例子
12.1.5 内存管理的开销
12.2 重新设计前面的例子
12.2.1 仅从堆中创建string类
12.2.2 stash指针
12.2.3 stack例子
12.3 用于数组的new和delete
12.4 用完内存
12.5 重载new和delete
12.5. 1 重载全局new和delete
12.5.2 为一个类重载new和delete
12.5.3 为数组重载new和delete
12.5.4 构造函数调用
12.5.5 对象放置
12.6 小结
12.7 练习
第13章 继承和组合
13.1 组合语法
13.2 继承语法
13.3 构造函数的初始化表达式表
13. 3.1 成员对象初始化
13.3.2 在初始化表达式表中的内置类型
13.4 组合和继承的联合
13.4. 1 构造函数和析构函数的次序
13.4. 2 名字隐藏
13.4. 3 非自动继承的函数
13.5 组合与继承的选择
13.5. 1 子类型设置
13.5.2 专门化
13.5.3 私有继承
13.6 保护
13. 7 多委继承
13.8 渐增式开发
13.9 向上映射
13.9.1 为什么向上映射
13.9.2 组合与继承
13.9.3 指针和引用的向上映射
13.9.4 危机
13.10 小结
13.11 练习
第14章 多态和虚函数
14.1 向上映射
14.2 问题
14.3 虚函数
14.4 C++如何实现晚捆绑
14.4.1 存放类型信息
14.4. 2 对虚函数作图
14.4. 3 撩开面纱
14.4.4 安装vpointer
14.4.5 对象是不同的
14.5 为什么需要虚函数
14.6 抽象基类和纯虚函数
14. 7 继承和VTABLE
14.8 虚函数和构造函数
14.8.1 构造函数调用次序
14. 8.2 虚函数在构造函数中的行为
14.9 析构函数和虚拟析构函数
14. 10 小结
14.11 练习
第15章 模板和包容器类
15.1 包容器和循环子
15.2 模板综述
15.2.1 C方法
15.2.2 Smalltalk方法
15.2.3 模板方法
15.3 模板的语法
15.3.1 非内联函数定义
15.3.2 栈模板(the stack as a template)
15.3.3 模板中的常量
15.4 stash&stack模板
15.4. 1 所有权问题
15.4. 2 stash模板
15.4. 3 stack模板
15.5 字符串和整型
15.5.1 栈上的字符串
15. 5.2 整型
15.6 向量
15.6.1 “无穷”向董
15.6. 2 集合
15.6.3 关联数组
15.7 模板和继承
15.7.1 设计和效率
15.7.2 防止模板膨胀
15.8 多态性和包容器
15.9 包容器类型
15.10 函数模板
15.10.1 存储分配系统
15.10.2 为tstack提供函数
15.10.3 成员函数模板
15.11 控制实例
15.12 小结
15.13 练习
第16章 多重继承
16.1 概述
16. 2 子对象重叠
16.3 向上映射的二义性
16.4 虚基类
16.4.1 “最晚辈派生”类和虚基初始化
16.4.2 使用缺省构造函数向虚基“警告”
16. 5 开销
16.6 向上映射
16.7 避免MI
16. 8 修复接门
16.9 小结
16. 10 练习
第17章 异常处理
17.1 C语:的出错处理
17.2 抛出异常
17. 3 异常捕获
17.3.1 try块
17.3.2 异常处理器
17.3.3 异常规格说明
17.3.4 更好的异常规格说明
17.3.5 捕获所有异常
17.3.6 异常的重新抛出
17.3.7 未被捕获的异常
17.4 清除
17.5 构造函数
17.6 异常匹配
17.7 标准异常
17. 8 含有异常的程序设计
17.8.1 何时避免异常
17.8.2 异常的典型使用
17.9 开销
17.10 小结
17.11 练习
第18章 运行时类型识别
18.1 例子——shape
18.2 什么是RTTI
18.3 语法细节
18.3.1 对于内部类型的tyPeid()
18.3.2 产生合适的类型名字
18.3.3 非多态类型
18.3.4 映射到中间级
18.3.5 Void指针
18.3.6 用模板来使用RTTI
18.4 引用
18.5 多重继承
18.6 合理使用RTTI
18.7 RTTI的机制及花费
18.8 创建我们自己的RTTI
18.9 新的映射语法
18.9.I Static Cast
18.9.2 const cast
18.9.3 reinterpret cast
18.10 小结
18.11 练习
附录A 其他性能
附录B 编程准则
附录C 模拟虚构造函数
前言
第1章 对象的演化
1.1 基本概念
1.1.1 对象:特性+行为
1.1.2 继承:类型关系
1.1.3 多态性
1.1.4 操作概念:OOP程序像什么
1.2 为什么C++会成功
1.2.1 较好的C
1.2.2 采用渐进的学习方式
1.2.3 运行效率
1.2.4 系统更容易表达和理解
1.2.5 “库”使你事半功倍
1.2.6 错误处理
1.2.7 大程序设计
1.3 方法学介绍
1.3.1 复杂性
1.3.2 内部原则
1.3.3 外部原则
1.3.4 对象设计的五个阶段
1.3.5 方法承诺什么
1.3.6 方法应当提供什么
1.4 起节:最小的方法
1.4.1 前提
1.4. 2 高概念
1.4.3 论述(treatment)
1.4.4 结构化
1.4.5 开发
1.4.6 重写
1.4. 7 逻辑
1.5 其他方法
1.5.1 Booch
1.5.2 责任驱动的设计(RDD)
1.5.3 对象建模技术(OMT)
1.6 为向OOP转变而采取的策略
1.6.1 逐步进入OOP
1.6. 2 管理障碍
1.7 小结
第2章 数据抽象
2.1 声明与定义
2.2 一个袖珍C库
2.3 放在一起:项目创建工具
2.4 什么是非正常
2.5 基本对象
2.6 什么是对象
2.7 抽象数据类型
2.8 对象细节
2.9 头文件形式
2.10 嵌套结构
2.11 小结
2.12 练习
第3章 隐藏实现
3.1 设置限制
3.2 C++的存取控制
3. 3 友元
3.3.1 嵌套友元
3.3.2 它是纯的吗
3.4 对象布局
3. 5 类
3.5.1 用存取控制来修改stash
3.5.2 用存取控制来修改stack
3.6 句柄类(handle classes)
3.6. 1 可见的实现部分
3.6. 2 减少重复编译
3.7 小结
3.8 练习
第4章 初始化与清除
4. 1 用构造函数确保初始化
4. 2 用析构函数确保清除
4.3 清除定义块
4. 3.1 for循环
4.3.2 空间分配
4.4 含有构造函数和析构函数的stash
4.5 含有构造函数和桥构函数的stack
4. 6 集合初始化
4. 7 缺省构造函数
4.8 小结
4. 9 练习
第5章 函数重载与缺省参数
5.1 范围分解
5.1.1 用返回值重载
5. 1.2 安全类型连接
5. 2 重载的例子
5.3 缺省参数
5.4 小结
5.5 练习
第6章 输入输出流介绍
6. 1 为什么要用输入输出流
6. 2 解决输入输出流问题
6. 2.1 预先了解操作符重载
6.2.2 插入符与提取符
6. 2.3 通常用法
6. 2.4 面向行的输入
6. 3 文件输入输出流
6.4 输入输出流缓冲
6.5 在输人输出流中查找
6.6 strstreams
6.6. 1 为用户分配的存储
6.6.2 自动存储分配
6.7 输出流格式化
6.7.1 内部格式化数据
6. 7.2 例子
6. 8 格式化操纵算子
6.9 建扩操纵算子
6.10 输入输出流实例
6.10.1 代码生成
6.10.2 一个简单的数据记录
6. 11 小结
6. 12 练习
第7章 常量
7. 1 值替代
7.1.1 头文件里的const
7. 1. 2 const的安全性
7.1.3 集合
7.1.4 与C语言的区别
7. 2 指针
7.2.1 指向const的指针
7.2.2 const指针
7.2.3 赋值和类型检查
7.3 函数参数和返回值
7.3.1 传递const值
7.3.2 返回const值
7.3.3 传递和返回地址
7. 4 类
7.4.1 类里的const和enum
7.4. 2 编译期间类里的常量
7. 4. 3 const对象和成员函数
7.4. 4 只读存储能力
7.5 可变的(Volatile)
7.6 小结
7. 7 练习
第8章 内联函数
8.1 预处理器的缺陷
8.2 内联函数
8.2.1 类内部的内联函数
8.2.2 存取函数
8.3 内联函数和编译器
8.3.1 局限性
8.3.2 赋值顺序
8.3.3 在构造函数和桥构因数里隐藏行为
8.4 减少混乱
8.5 预处理器的特点
8.6 改进的错误检查
8.7 小结
8.8 练习
第9章 命名控制
9.1 来自C语言中的静态成员
9.1.1 函数内部的静态变量
9.1.2 控制连接
9.1.3 其他的存储类型指定符
9.2 名字空间
9.2.1 产生一个名字空间
9.2. 2 使用名字空间
9.3 C++中的静态成员
9.3.1 定义静态数据成员的存储
9.3.2 嵌套类和局部类
9.3.3 静态成员国数
9.4 静态初始化的依赖因素
9.5 转换连接指定
9.6 小结
9.7 练习
第10章 引用和拷贝构造函数
10.1 C++中的指针
10.2 C++中的引用
10.2.1 函数中的引用
10.2.2 参数传递准则
10.3 拷贝构造函数
10.3.1 传值方式传递和返问
10.3.2 拷贝构造函数
10.3.3 缺省拷贝构造函数
10.3.4 拷贝构造国数方法的选择
10.4 指向成员的指针(简称成员指针)
10.5 小结
10.6 练习
第11章 运算符重载
11.1 警告和确信
11.2 语法
11.3 可重载的运算符
11.3.1 一元运算符
11.3.2 二元运算符
11.3.3 参数和返回值
11.3. 4 与众不同的运算符
11.3.5 不能重载的运算符
11.4 非成员运算符
11.5 重载赋值符
11.6 自动类型转换
11.6.1 构造国数转换
11. 6.2 运算符转换
11.6.3 一个样想的例子:Strings
11.6. 4 自动类型转换的缺陷
11.7 小结
11.8 练习
第12章 动态对象创建
12.1 对象创建,
12.1. 1 C从堆中获取存储单元的方法
12.1.2 运算符new
12.1.3 运算符delete
12.1.4 一个简单的例子
12.1.5 内存管理的开销
12.2 重新设计前面的例子
12.2.1 仅从堆中创建string类
12.2.2 stash指针
12.2.3 stack例子
12.3 用于数组的new和delete
12.4 用完内存
12.5 重载new和delete
12.5. 1 重载全局new和delete
12.5.2 为一个类重载new和delete
12.5.3 为数组重载new和delete
12.5.4 构造函数调用
12.5.5 对象放置
12.6 小结
12.7 练习
第13章 继承和组合
13.1 组合语法
13.2 继承语法
13.3 构造函数的初始化表达式表
13. 3.1 成员对象初始化
13.3.2 在初始化表达式表中的内置类型
13.4 组合和继承的联合
13.4. 1 构造函数和析构函数的次序
13.4. 2 名字隐藏
13.4. 3 非自动继承的函数
13.5 组合与继承的选择
13.5. 1 子类型设置
13.5.2 专门化
13.5.3 私有继承
13.6 保护
13. 7 多委继承
13.8 渐增式开发
13.9 向上映射
13.9.1 为什么向上映射
13.9.2 组合与继承
13.9.3 指针和引用的向上映射
13.9.4 危机
13.10 小结
13.11 练习
第14章 多态和虚函数
14.1 向上映射
14.2 问题
14.3 虚函数
14.4 C++如何实现晚捆绑
14.4.1 存放类型信息
14.4. 2 对虚函数作图
14.4. 3 撩开面纱
14.4.4 安装vpointer
14.4.5 对象是不同的
14.5 为什么需要虚函数
14.6 抽象基类和纯虚函数
14. 7 继承和VTABLE
14.8 虚函数和构造函数
14.8.1 构造函数调用次序
14. 8.2 虚函数在构造函数中的行为
14.9 析构函数和虚拟析构函数
14. 10 小结
14.11 练习
第15章 模板和包容器类
15.1 包容器和循环子
15.2 模板综述
15.2.1 C方法
15.2.2 Smalltalk方法
15.2.3 模板方法
15.3 模板的语法
15.3.1 非内联函数定义
15.3.2 栈模板(the stack as a template)
15.3.3 模板中的常量
15.4 stash&stack模板
15.4. 1 所有权问题
15.4. 2 stash模板
15.4. 3 stack模板
15.5 字符串和整型
15.5.1 栈上的字符串
15. 5.2 整型
15.6 向量
15.6.1 “无穷”向董
15.6. 2 集合
15.6.3 关联数组
15.7 模板和继承
15.7.1 设计和效率
15.7.2 防止模板膨胀
15.8 多态性和包容器
15.9 包容器类型
15.10 函数模板
15.10.1 存储分配系统
15.10.2 为tstack提供函数
15.10.3 成员函数模板
15.11 控制实例
15.12 小结
15.13 练习
第16章 多重继承
16.1 概述
16. 2 子对象重叠
16.3 向上映射的二义性
16.4 虚基类
16.4.1 “最晚辈派生”类和虚基初始化
16.4.2 使用缺省构造函数向虚基“警告”
16. 5 开销
16.6 向上映射
16.7 避免MI
16. 8 修复接门
16.9 小结
16. 10 练习
第17章 异常处理
17.1 C语:的出错处理
17.2 抛出异常
17. 3 异常捕获
17.3.1 try块
17.3.2 异常处理器
17.3.3 异常规格说明
17.3.4 更好的异常规格说明
17.3.5 捕获所有异常
17.3.6 异常的重新抛出
17.3.7 未被捕获的异常
17.4 清除
17.5 构造函数
17.6 异常匹配
17.7 标准异常
17. 8 含有异常的程序设计
17.8.1 何时避免异常
17.8.2 异常的典型使用
17.9 开销
17.10 小结
17.11 练习
第18章 运行时类型识别
18.1 例子——shape
18.2 什么是RTTI
18.3 语法细节
18.3.1 对于内部类型的tyPeid()
18.3.2 产生合适的类型名字
18.3.3 非多态类型
18.3.4 映射到中间级
18.3.5 Void指针
18.3.6 用模板来使用RTTI
18.4 引用
18.5 多重继承
18.6 合理使用RTTI
18.7 RTTI的机制及花费
18.8 创建我们自己的RTTI
18.9 新的映射语法
18.9.I Static Cast
18.9.2 const cast
18.9.3 reinterpret cast
18.10 小结
18.11 练习
附录A 其他性能
附录B 编程准则
附录C 模拟虚构造函数
猜您喜欢