展开全部

主编推荐语

全书18章,分为C++发展史及重要特性两部分,附有专业术语索引。

内容简介

全书共18章,分两大部分,其中第1部分(第1~9章)分别介绍了C++的史前时代、C with Classes、C++的诞生、C++语言设计规则、1985—1993年表、标准化、关注和使用、库、展望;第2部分(第10~18章)分别介绍了存储管理、重载、多重继承、类概念的精练、强制转换、模板、异常处理、名称空间、C语言预处理器。为便于查找与学习,全书最后附有专业术语索引。

目录

  • 版权信息
  • 版权
  • 版权声明
  • 内容提要
  • 译者序
  • 前言
  • 资源与支持
  • 第0章 致读者
  • 引言
  • 怎样阅读这本书
  • C++时间表
  • 关注使用和用户们
  • 程序设计语言
  • 参考文献
  • 第一部分
  • 第1章 C++的史前时代
  • 1.1 Simula和分布式系统
  • 1.2 C与系统程序设计
  • 1.3 一般性的背景
  • 第2章 C with Classes
  • 2.1 C with Classes的诞生
  • 2.2 特征概览
  • 2.3 类
  • 2.4 运行时的效率
  • inline机制
  • 2.5 连接模型
  • 2.5.1 纯朴的实现
  • 2.5.2 对象连接模型
  • 2.6 静态类型检查
  • 2.6.1 窄转换
  • 2.6.2 警告的使用
  • 2.7 为什么是C
  • 2.8 语法问题
  • 2.8.1 C声明的语法
  • 2.8.2 结构标志与类型名
  • 2.8.3 语法的重要性
  • 2.9 派生类
  • 2.9.1 没有虚函数时的多态性
  • 2.9.2 没有模板时的容器类
  • 2.9.3 对象的布局模型
  • 2.9.4 回顾
  • 2.10 保护模型
  • 2.11 运行时保证
  • 2.11.1 构造函数与析构函数
  • 2.11.2 存储分配和构造函数
  • 2.11.3 调用函数和返回函数
  • 2.12 次要特征
  • 2.12.1 赋值的重载
  • 2.12.2 默认实参
  • 2.13 考虑过,但是没提供的特征
  • 2.14 工作环境
  • 第3章 C++的诞生
  • 3.1 从C with Classes到C++
  • 3.2 目标
  • 3.3 Cfront
  • 3.3.1 生成C
  • 3.3.2 分析C++
  • 3.3.3 连接问题
  • 3.3.4 Cfront发布
  • 3.4 语言特征
  • 3.5 虚函数
  • 3.5.1 对象布局模型
  • 3.5.2 覆盖和虚函数匹配
  • 3.5.3 基成员的遮蔽
  • 3.6 重载
  • 3.6.1 基本重载
  • 3.6.2 成员和友元
  • 3.6.3 运算符函数
  • 3.6.4 效率和重载
  • 3.6.5 变化和新运算符
  • 3.7 引用
  • 左值和右值
  • 3.8 常量
  • 3.9 存储管理
  • 3.10 类型检查
  • 3.11 次要特征
  • 3.11.1 注释
  • 3.11.2 构造函数的记法
  • 3.11.3 限定
  • 3.11.4 全局变量的初始化
  • 3.11.4.1 动态初始化的问题
  • 3.11.4.2 绕过顺序依赖性
  • 3.11.4.3 内部类型的动态初始化
  • 3.11.5 声明语句
  • 3.11.5.1 for语句里的声明
  • 3.11.5.2 条件语句里的声明
  • 3.12 与经典C的关系
  • 3.13 语言设计的工具
  • 3.14 《C++程序设计语言》(第1版)
  • 3.15 有关“什么是”的论文
  • 第4章 C++语言设计规则
  • 4.1 规则和原理
  • 4.2 一般性规则
  • 4.3 设计支持规则
  • 4.4 语言的技术性规则
  • 4.5 低级程序设计支持规则
  • 4.6 最后的话
  • 第5章 1985—1993年年表
  • 5.1 引言
  • 5.2 Release 2.0
  • 特征概览
  • 5.3 带标注的参考手册(ARM)
  • 特征概览
  • 5.4 ANSI和ISO标准化
  • 特征概览
  • 第6章 标准化
  • 6.1 什么是标准
  • 6.1.1 实现细节
  • 6.1.2 现实的检查
  • 6.2 委员会如何运作
  • C++ 标准化委员会里有哪些人
  • 6.3 净化
  • 6.3.1 查找问题
  • 6.3.1.1 ARM名字查找规则
  • 6.3.1.2 为什么允许前向引用
  • 6.3.1.3 ANSI/ISO名字查找规则
  • 6.3.2 临时量的生存期
  • 6.4 扩充
  • 6.4.1 评价准则
  • 6.4.2 状况
  • 6.4.3 好扩充的问题
  • 6.4.4 一致性
  • 6.5 扩充建议的例子
  • 6.5.1 关键词实参
  • 关键词实参的变形
  • 6.5.2 受限指针
  • 6.5.3 字符集
  • 6.5.3.1 受限字符集
  • 6.5.3.2 扩充字符集
  • 第7章 关注和使用
  • 7.1 关注和使用的爆炸性增长
  • 7.1.1 C++ 市场的缺位
  • 7.1.2 会议
  • 7.1.3 杂志和书籍
  • 7.1.4 编译器
  • 7.1.5 工具和环境
  • 7.2 C++的教与学
  • 7.3 用户和应用
  • 7.3.1 早期用户
  • 7.3.2 后来的用户
  • 7.4 商业竞争
  • 7.4.1 传统语言
  • 7.4.2 更新一些的语言
  • 7.4.3 期望和看法
  • 第8章 库
  • 8.1 引言
  • 8.2 C++ 库设计
  • 8.2.1 库设计的折中
  • 8.2.2 语言特征和库的构造
  • 8.2.3 处理库的多样性
  • 8.3 早期的库
  • 8.3.1 流I/O库
  • 8.3.2 并行支持
  • 8.3.2.1 一个作业实例
  • 8.3.2.2 锁
  • 8.4 其他库
  • 8.4.1 基础库
  • 8.4.2 持续性和数据库
  • 8.4.3 数值库
  • 8.4.4 专用库
  • 8.5 一个标准库
  • 第9章 展望
  • 9.1 引言
  • 9.2 回顾
  • 9.2.1 C++ 在其预期领域取得了成功吗
  • 9.2.2 C++ 是不是一个统一的语言
  • 9.2.2.1 什么东西本不该而且也可以不是现在的样子
  • 9.2.2.2 什么东西本应该排除在外
  • 9.2.2.3 什么东西本应该加进来
  • 9.2.3 什么是最大失误
  • 9.3 仅仅是一座桥梁吗
  • 9.3.1 在一个很长的时期里,我们还需要这座桥梁
  • 9.3.2 如果C++ 是答案,那么问题是什么
  • 9.3.2.1 低层系统程序设计
  • 9.3.2.2 高层系统程序设计
  • 9.3.2.3 嵌入式系统
  • 9.3.2.4 数值/科学计算
  • 9.3.2.5 通用应用程序设计
  • 9.3.2.6 混合系统
  • 9.4 什么能使C++更有效
  • 9.4.1 稳定性和标准
  • 9.4.2 教育和技术
  • 9.4.3 系统方面的问题
  • 9.4.4 在文件和语法之外
  • 9.4.5 总结
  • 第二部分
  • 第10章 存储管理
  • 10.1 引言
  • 10.2 将存储分配和初始化分离
  • 10.3 数组分配
  • 10.4 放置
  • 10.5 存储释放问题
  • 数组的释放
  • 10.6 存储器耗尽
  • 10.7 自动废料收集
  • 10.7.1 可选的废料收集
  • 10.7.2 可选择的废料收集应该是什么样子的
  • 第11章 重载
  • 11.1 引言
  • 11.2 重载的解析
  • 11.2.1 细粒度解析
  • 11.2.2 歧义控制
  • 11.2.3 空指针
  • 11.2.4 overload关键字
  • 11.3 类型安全的连接
  • 11.3.1 重载和连接
  • 11.3.2 C++连接的一种实现
  • 11.3.3 回顾
  • 11.4 对象的建立和复制
  • 11.4.1 对复制的控制
  • 11.4.2 对分配的控制
  • 11.4.3 对派生的控制
  • 11.4.4 按成员复制
  • 11.5 记法约定
  • 11.5.1 灵巧指针
  • 11.5.2 灵巧引用
  • 11.5.3 增量和减量的重载
  • 11.5.4 重载 ->*
  • 11.5.5 重载逗号运算符
  • 11.6 给C++ 增加运算符
  • 11.6.1 指数运算符
  • 11.6.2 用户定义运算符
  • 11.6.3 复合运算符
  • 11.7 枚举
  • 11.7.1 基于枚举的重载
  • 11.7.2 布尔类型
  • 第12章 多重继承
  • 12.1 引言
  • 12.2 普通基类
  • 12.3 虚基类
  • 虚基类和虚函数
  • 12.4 对象布局模型
  • 12.4.1 虚基布局
  • 12.4.2 虚基类和强制
  • 12.5 方法组合
  • 12.6 有关多重继承的论战
  • 12.7 委托
  • 12.8 重命名
  • 12.9 基类和成员的初始式
  • 第13章 类概念的精炼
  • 13.1 引言
  • 13.2 抽象类
  • 13.2.1 为处理错误而用的抽象类
  • 13.2.2 抽象类型
  • 13.2.3 语法
  • 13.2.4 虚函数和构造函数
  • 13.2.4.1 调用一个纯虚函数
  • 13.2.4.2 基类优先的构造
  • 13.2.4.3 换个方式会怎样
  • 13.3 const成员函数
  • 13.3.1 强制去掉const
  • 13.3.2 const定义的精炼
  • 13.3.3 可变性与强制
  • 13.4 静态(static)成员函数
  • 13.5 嵌套的类
  • 13.6 Inherited::
  • 13.7 放松覆盖规则
  • 放松参数规则
  • 13.8 多重方法
  • 绕过多重方法
  • 13.9 保护成员
  • 13.10 改进代码生成
  • 13.11 到成员的指针
  • 第14章 强制
  • 14.1 主要扩充
  • 14.2 运行时类型信息
  • 14.2.1 问题
  • 14.2.2 dynamic_cast运算符
  • 14.2.2.1 语法
  • 14.2.2.2 何时能使用动态强制
  • 14.2.2.3 从虚基类出发的强制
  • 14.2.3 RTTI的使用和误用
  • 14.2.4 为什么提供一个“危险特征”
  • 14.2.5 typeid()运算符
  • 14.2.5.1 类type_info
  • 14.2.5.2 扩充的类型信息
  • 14.2.6 对象布局模型
  • 14.2.7 一个例子:简单的对象I/O
  • 14.2.8 考虑过的其他选择
  • 14.2.8.1 元对象
  • 14.2.8.2 类型查询运算符
  • 14.2.8.3 类型关系
  • 14.2.8.4 多重方法
  • 14.2.8.5 非受限方法
  • 14.2.8.6 带检查的初始化
  • 14.3 强制的一种新记法
  • 14.3.1 问题
  • 14.3.2 static_cast运算符
  • 静态强制和动态强制
  • 14.3.3 reinterpret_cast运算符
  • 14.3.4 const_cast运算符
  • 与const保护有关的问题
  • 14.3.5 新风格强制的影响
  • 14.3.5.1 老风格强制
  • 14.3.5.2 隐式窄转换
  • 14.3.5.3 构造函数调用的记法
  • 14.3.5.4 新强制的使用
  • 第15章 模板
  • 15.1 引言
  • 15.2 模板
  • 15.3 类模板
  • 非类型模板参数
  • 15.4 对模板参数的限制
  • 15.4.1 通过派生加以限制
  • 15.4.2 通过使用加以限制
  • 15.5 避免代码重复
  • 15.6 函数模板
  • 15.6.1 函数模板参数的推断
  • 15.6.2 描述函数模板的参数
  • 15.6.3 函数模板的重载
  • 模板里的条件
  • 15.7 语法
  • 15.8 组合技术
  • 15.8.1 表述实现策略
  • 15.8.2 描述顺序关系
  • 15.9 模板类之间的关系
  • 15.9.1 继承关系
  • 15.9.2 转换
  • 15.9.3 成员模板
  • 15.10 模板的实例化
  • 15.10.1 显式的实例化
  • 15.10.2 实例化点
  • 15.10.2.1 定义“依赖于T”
  • 15.10.2.2 歧义性
  • 15.10.3 专门化
  • 15.10.4 查找模板定义
  • 15.11 模板的作用
  • 15.11.1 实现与界面的分离
  • 15.11.2 灵活性和效率
  • 15.11.3 对C++ 其他部分的影响
  • 第16章 异常处理
  • 16.1 引言
  • 16.2 目标和假设
  • 16.3 语法
  • 16.4 结组
  • 16.5 资源管理
  • 构造函数里出错
  • 16.6 唤醒与终止
  • 迂回地实现唤醒
  • 16.7 非同步事件
  • 16.8 多层传播
  • 16.9 静态检查
  • 实现问题
  • 16.10 不变式
  • 第17章 名字空间
  • 17.1 引言
  • 17.2 问题
  • 迂回方法
  • 17.3 解决方案的思想
  • 17.4 一个解决方案:名字空间
  • 17.4.1 有关使用名字空间的观点
  • 17.4.2 使名字空间投入使用
  • 17.4.3 名字空间的别名
  • 17.4.4 利用名字空间管理版本问题
  • 17.4.5 细节
  • 17.4.5.1 方便性与安全性
  • 17.4.5.2 全局作用域
  • 17.4.5.3 重载
  • 17.4.5.4 嵌套的名字空间
  • 17.4.5.5 名字空间是开放的
  • 17.5 对于类的影响
  • 17.5.1 派生类
  • 17.5.2 使用基类
  • 17.5.3 清除全局的static
  • 17.6 与C语言的兼容性
  • 第18章 C语言预处理器
  • Cpp
展开全部

评分及书评

评分不足
1个评分
  • 用户头像
    给这本书评了
    5.0
    C++生命力如此顽强的原因

    本书是 C++ 之父写的,本书大约在 2000 年,20 年过去了,现在看起来依然不过时。记录下读书体会:1.c++ 语言诞生于 1980 年代左右,当时已经有很多编程语言了,c 是系统编程的王者,一直被挑战,从未被超越。作者发现 c 语言在处理大规模系统编程时,存在全局命名污染问题,且语言组织不如 smalltalk 等面向对象那般接近业务抽象,于是基于 c 开始了改造。2. 改造时先定了一些基调:a) 与 c 语言尽可能的保持兼容,除非臣妾做不到 —— 继承了财产的同时,也继承了负担 B) 保持与 c 语言相当的运行效率 —— 系统编程对实时性有要求,所以,一直没有引入垃圾回收 C) 新特性需要编译器支持,编译器的开发与编译时间都要可接受 D) c++ 自身定位为通用编程语言,只接受比较通用的特性 —— 如果在特定领域才会用到的特性,建议用库的方式进行扩展,而不是语言本身 3. 相比于 cc++ 主要加的东西是:A) 类,这是面向对象与面向过程最大的区别。—— 编程是人与机器沟通的语言,面向过程的语言是告诉机器(执行者)如何做,面向对象是对一个有机体说你向要啥。编程的趋势是,基础性的东西需要少量的高手参与建设,大部分的开发人员是使用者,知道如何使用(难度比如何生产降低了很多),然后把老板的想法转告给机器 B) 命名空间,c 只有一个全局的命名空间,就好比大家都有一个名字,在全国范围内,很容易重名。c++ 引入了命名空间,可以理解为在名字前加上了地域限制,完整的名字就变成了 省。市. 区。村. 姓名 ,这样就不容易重名了。C) 异常,程序执行除了自身逻辑外,还依赖执行环境,就好比手机聊微信,遇到断网的情况。c 语言是通过函数返回值来判断状态的,每操作一次就查询一下状态,代码啰嗦还考虑不完整所有异常。异常机制有点像注册信号量处理函数,先说 “如果遇到 xx 异常,然后怎么处理”。罗列好异常后,开始正常的业务变成。业务归业务,异常归异常,一下就清爽了 C) 模板,类似的代码,只是数据类型不一样,显然不应该写很多重复的代码。c 语言是通过宏来解决的,用宏写代码很难维护。c++ 通过模板来解决 4.c++ 是公认的复杂,但是学习曲线确相对平缓,知道基本的输入输出,顺序、分支、循环等控制流程就可以编程了。遇到问题再去找特性都来得及 5. 这不是一本教授如何用 c++ 编程的书,而是作者讲述了他开发 c++ 的背景与发展的过程,在引入特性时,是如何决策的(与上述基调是否冲突,现实问题与实现代价的考量); 从编译器的角度是如何开看待这个特性的。作者并不是一个固执的 c++ 元价值卫道士,反而是一个思想开放的历史学者。几千年的历史经验来支撑几十年的软件历史,可能是个小儿科吧

      转发
      评论

    出版方

    人民邮电出版社

    人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。