深度探索C++对象模型

出版时间:2001-5  出版社:华中科技大学出版社  作者:[美] Stanley B. Lippman  页数:320  译者:侯捷  
Tag标签:无  

内容概要

本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于“对象导向性质之基础实现技术”以及“各种性质背后的隐含利益交换”提供一个清楚的认识。检验由程序变形所带来的效率冲击。提供丰富的程序范例、图片,以及对象导向观念和底层对象模型之间的效率测量。
C++成山似海的书籍堆中,这一本不是婴幼儿奶粉,也不是较大婴儿奶粉,它是成人专用的低脂高钙特殊奶粉。
对于C++底层机制感兴趣的读者,这本书会给你“漫卷诗书喜欲狂”的感觉。
了解C++ Object Model,是学习Component Object
Model的最短路线。
如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么Inside The
C++ Object Model正适合你。
关于作者:Stanley Lippman目前是华特迪斯尼主题动画公司(Walt
Disney Feature Animation)的主要软件工程师。他曾经在AT&T贝尔实验室领导cfront
3.0和2.1版的编译器开发小组。他也是贝尔实验室中由Bjame
Stroustrup所领导的Foundation专案组中的一员,负责对象模型并研究C++程序开发环境。Stan著有极为成功的C++
Primer一书,也发表过许多C++方面的论文。Stan最近刚从C++
Report的编辑位置上“退隐”,他曾在那个位置上做了4年。他的C++论述遍及全球。
关于译者:侯捷,海峡两岸著名的电脑技术自由作家,对于技术的钻研和发表,有独特的品性与坚持。作品涵盖著、译、评三方面,散见于各种刊特、媒体、网站论坛,深受读者喜爱和尊敬。

作者简介

Stanley
B.Lippman的职业是提供关于C++和面向对象的训练、咨询、设计和指导。他在成为一名独立咨询顾问之前,曾经是迪士尼动化公司的首席软件设计师。当他在AT&T
Bell实验室的时候,领导了cfront 3.0版本和2.1版本的编译器开发组。他也是Bjarne
Stroustrup领导的Bell实验室Fo

书籍目录

本立道生(侯捷 译序)
目录
前言(Stanley B.Lippman)
第0章 导读(译者的话)
第1章 关于对象(Object Lessons)
加上封装后的布局成本(Layout Costs for Adding Encapsulation)
1.1 C++模式模式(The C++ Object Model)
简单对象模型(A Simple Object Model)
表格驱动对象模型(A Table-driven Object Model)
C++对象模型(The C++ Object Model)
对象模型如何影响程序(How the Object Model Effects Programs)
1.2 关键词所带来的差异(A Keyword Distinction)
关键词的困扰
策略性正确的struct(The Politically Correct Struct)
1.3 对象的差异(An Object Distinction)
指针的类型(The Type of a Pointer)
加上多态之后(Adding Polymorphism)
第2章 构造函数语意学(The Semantics of constructors)
2.1 Default Constructor的建构操作
“带有Default Constructor”的Member Class Object
“带有Default Constructor”的Base Class
“带有一个Virual Function”的Class
“带有一个virual Base class”的Class
总结
2.2 Copy Constructor的建构操作
Default Memberwise Initialization
Bitwise Copy Semantics(位逐次拷贝)
不要Bitwise Copy Semantics!
重新设定的指针Virtual Table
处理Virtual Base Class Subobject
2.3 程序转换语意学(Program Transformation Semantics)
明确的初始化操作(Explicit Initialization)
参数的初始化(Argument Initialization)
返回值的初始化(Return Value Initialization)
在使用者层面做优化(Optimization at the user Level)
在编译器层面做优化(Optimization at the Compiler Level)
Copy Constructor:要还是不要?
摘要
2.4 成员们的初始化队伍(Member Initialization List)
第3章 Data语意学(The Semantics of Data)
3.1 Data Member的绑定(The Binding of a Data Member)
3.2 Data Member的布局(Data Member Layout)
3.3 Data Member的存取
Static Data Members
Nonstatic Data Member
3.4 “继承”与Data Member
只要继承不要多态(Inheritance without Polymorphism)
加上多态(Adding Polymorphism)
多重继承(Multiple Inheritance)
虚拟继承(Virtual Inheritance)
3.5 对象成员的效率(Object Member Efficiency)
3.6 指向Data Members的指针(Pointer to Data Members)
“指向Members的指针”的效率问题
第4章 Function语意学(The Semantics of Function)
4.1 Member的各种调用方式
Nonstatic Member Functions(非静态成员函数)
Virtual Member Functions(虚拟成员函数)
Static Member Functions(静态成员函数)
4.2 Virtual Member Functions(虚拟成员函数)
多重继承下的Virtual Functions
虚拟继承下的Virtual Functions
4.3 函数的效能
4.4 指向Member Functions的指针(Pointer-to-Member Functions)
支持“指向Virtual Member Functions”之指针
在多重继承之下,指向Member Functions的指针
“指向Member Functions之指针”的效率
4.5 Inline Functions
形式对数(Formal Arguments)
局部变量(Local Variables)
第5章 构造、解构、拷贝 语意学(Semantics of Construction,Destruction,and
Copy)
纯虚拟函数的存在(Presence of a Pure Virtual Function)
虚拟规格的存在(Presence of a Virtual Specification)
虚拟规格中const的存在
重新考虑class的声明
5.1 无继承情况下的对象构造
抽象数据类型(Abstract Data Type)
为继承做准备
5.2 继承体系下的对象构造
虚拟继承(Virtual Inheritance)
初始化语意学(The Semantics of the vptr Initialization)
5.3 对象复制语意学(Object Copy Semantics)
5.4 对象的功能(Object Efficiency)
5.5 解构语意学(Semantics of Destruction)
第6章 执行期语意学(Runting Semantics)
6.1 对象的构造和解构(Object Construction and Destruction)
全局对象(Global Objects)
局部静态对象(Local Static Objects)
对象数组(Array of Objects)
Default Constructors和数组
6.2 new和delete运算符
针对数组的new语意
Placement Operator new的语意
6.3 临时性对象(Temporary Objects)
临时性对象的迷思(神话、传说)
第7章 站在对象模型的类端(On the Cusp of the Object Model)
7.1 Template
Template的“具现”行为(Template Instantiation)
Template的错误报告(Error Reporting within a Template)
Template中的名称决议方式(Name Resolution within a Template)
Member Function的具现行为(Member Function Instantiation)
7.2 异常处理(Exception Handling)
Exception Handling快速检阅
对Exception Handling的支持
7.3 执行期类型识别(Runtime Type Identification,RTTI)
Type-Safe Downcast(保证安全的向下转型操作)
Type-Safe Dynamic Cast(保证安全的动态转型)
References并不是Pointers
Typeid运算符
7.4 效率有了,弹性呢?
动态共享函数库(Dynamic Shared Libraries)
共享内存(Shared Memory)

媒体关注与评论

前言差不多有10年之久,我在贝尔实验室(Bell Laboratories)埋首于C++的实现任务。最初的工作是在cfront上面(Bjarne Stroustrup的第一个C++编译器),从1986年的1.1版到1991年9月的3.0版,然后移转到Simplifier(这是我们内部的命名),也就是Found~ion项目中的C++对象模型部分。在Simplifier设计期间,我开始酝酿这本书。    Foundation项目是什么?在Bjarne的领导下,贝尔实验室中的一个小组探索着以C++完成大规模程序设计时的种种问题的解决之道。Foundation项目是我们为了构造大系统而努力定义的一个新的开发模型;我们只使用C++,并不提供多重语言的解决方案。这是个令人兴奋的工作,一方面是因为工作本身,一方面是因为工作伙伴:Bjarne、Andy Koenig、Rob Murray、Martin Carroll、Judy Ward、Steve Buroff、Peter Juhl,以及我自己。Barbara Moo管理我们这一群人(Bjarne和Andy除外)。Barbara Moo常说管理一个软件团队,就像放牧一群骄傲的猫。    我们把Foundation想象成一个核心,在那上面,其它人可以为使用者铺设一层真正的开发环境,把它整修为他们所期望的UNIX或Smalltalk模型。私底下我们把它称为Grail(传说中耶稣最后的晚餐所用的圣杯),人人都想要,但是从来没人找到过!    Grail使用一个由Rob Murray发展出来并命名为ALF的面向对象层次结构,提供一个永久的、以语意为基础的表现法。在Grail中,传统编译器被分解为数个各自分离的可执行文件。parser负责建立程序的ALF表现法。其它每一个组件(比如type checking、simplification,code generation)以及工具(比如browser)都在程序的一个ALF表现体上操作(并可能加以扩展)。Simplifier是编译器的一部分,处于typechecking和codegeneration之间。Simplifier这个名称是由Bjarne所倡议的,它原本是cfront的一个阶段(phase)。    在type checking和code generation之间,Simplifier做什么事呢?它用来转换内部的程序表现。有三种转换风味是任何对象模型都需要的:  1.与编译器息息相关的转换(Implementation,dependent transformations)    这是与特定编译器有关的转换。在ALF之下,这意味着我们所谓的“tentative”nodes。例如,当parser看到这个表达式:    fct();    它并不知道是否(a)这是一个函数调用操作,或者(b)这是overloaded call operator在class object fct上的一种应用。默认情况下,这个式子所代表的是一个函数调用,但是当(b)的情况出现时,Simplifier就要重写并调换call subtree。  2.语言语意转换(Language semantics transformations)    这包括constructor/destructor的合成和扩展、memberwise初始化、对于memberwise copy的支持、在程序胫邪膊錭onversion operators、临时性对象,以及对constructor/destructor的调用。  3.程序代码和对象模型的转换(Code and object model transformations)    这包括对virtual functions、virtual base class和inheritance的一般支持、new和delete运算符、class objects所组成的数组、local static class instances、带有非常量表达式(nonconstant expression)之global object的静态初始化操作。我对Simplifier所规划的一个目标是:提供一个对象模型体系,在其中,对象的实现是一个虚拟接口,支持各种对象模型。    最后两种类型的转换构成了本书的基础。这意味着本书是为编译器设计者而写的吗?不是,绝对不是!这本书是由一位编译器设计者针对中高级C++程序员所写的。隐藏在这本书背后的假设是,程序员如果了解C++对象模型,就可以写出比较没有错误倾向而且比较有效率的代码。

编辑推荐

《深度探索C++对象模型》涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。C++成山似海的书籍堆中,这一本不是婴幼儿奶粉,也不是较大婴儿奶粉,它是成人专用的低脂高钙特殊奶粉。对于C++底层机制感兴趣的读者,这《深度探索C++对象模型》会给你"漫卷诗书喜欲狂"的感觉。了解C++ Object Model,是学习Component Object Model的最短路线。如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么Inside The C++ Object Model正适合你。

图书封面

图书标签Tags

评论、评分、阅读与下载


    深度探索C++对象模型 PDF格式下载


用户评论 (总计19条)

 
 

  •   本书不适合初学者,需要一定的c++基础才能有所收获
  •   经典的书籍,修炼内功
  •   该书适合有一定功底的C++学习者。
  •   书很好,和学校的一样
  •   这本书的内容不错,以前看过,重新学习一下
  •   学C++,看这本书没人会后悔的,当然要是看不懂那就没办法了。好书就是好书
  •   沙发~~
  •   这书非常好,经典
  •   深度探索C 对象模型
  •   这本书名气很大,很多人推荐
  •   物流要加强
  •   想要深入了解C 实现机制的可以看
  •   听名字很给力
  •   书质量很不错,侯捷老师的书,内容很有深度
  •     很好很好,C++正要学习,还有C语言,大家能推荐一本经典的书不,想学习linux驱动开发。不知有经典的没。
      刚看一少半,准备春节之前看完,哈哈哈
      很好很好,C++正要学习,还有C语言,大家能推荐一本经典的书不,想学习linux驱动开发。不知有经典的没。
      刚看一少半,准备春节之前看完,哈哈哈
  •     我说下我的经验吧,希望可以帮到后来者。
       我觉得这本书并不像很多人说的那样煎熬,关键是找一个实际的编译系统实践一下,看好类的内存布局和一些7788的反汇编,有了实践的基础去看就很简单了的其实。
      我花了大概半个月时间,在VS下摸索了类的内存布局,然后才看的这本书,我20个小时就看完了,而且基本上都懂。
      
      有兴趣可以去看下我摸索VS下C++类对象内存布局的时候写下的笔记,大概5~60页的word吧。像我这样来学的话我估计就不会有那么多人喊什么难了,关键的实践,得多花时间去实践,光靠脑子想是没有意义的。
      我的笔记在博客园:
      http://www.cnblogs.com/lindeshi/archive/2012/10/20/2732590.html
      欢迎膜拜以及指正讨论等等。
  •     做C++开发8,9年了,虽然个人认为也积累了一些语言方面的开发经验,可是看到这本书以后,发现自己了解的内容还是太肤浅了,虽然这本书中介绍的内容并不能直接用于平时的项目开发,可是它能够让你对这门语言有一个更为深入的了解,同时也能够对面向对象的编程思想有了更为深入的理解。
      自从拿到这本书以后,我已经连续通读过三遍了,每一次都能够得到更多更新的的体会。
  •      我是以日记的形式写下,写完发觉有些书评的性质,就发到此处。
      
       首先说 《深度探索 C++ 对象模型》 是一本书,一本介绍 C++ 对象模型的书,这是一本独一无二的从编译器的解读来阐述 C++ 对象模型的书籍,因着编译器的设计者和学习者全球本来就少,加之深度研究 C++ 的更是二月里的29号,少之又少。所以界外人士不可知,正常;界内人士不可知,可谅。
      
       然书非界不能读也,对于此论,我颇赞成:我有足够的书籍来证明。在我书架上的,恰恰是每个领域顶端的专著,权威而且多大绝版。我也想多少人那样求之不得,最后求得了,反倒不求了。他们是静静的躺在书架,只能证实我当初的野心,也象征性的说明我后来的俗气。直到某天某个时刻,有人问我些许问题了,我开始想了,想到了所有的情况,最后定格在某本书上,然后下载电子书,查找内容。最后却猛拍脑门,我脑门后面不是有吗?这才看到它们得意而蔑视的姿态。
      
       像这样一本 <深度探索 C++ 对象模型》更甚。以至于我每次扫描书架,全然不见他瘦弱的身躯。或许它太薄了,容不在我狂妄的视野里;又或许它太矮了,根本没有入我眼的条件。就这样,它默默无闻,我浑然不知。直到同学问起我一些C++ 的语法相关概念的时候,我给他们解释语法,他们却问为何如此?为何如此,这个得问编译器了。我才知晓这本书的价值到了展现的时候了,我再次看这本书,里面虽然不是婴幼儿奶粉,是成人专用的低脂高钙特殊奶粉,却恰巧生在了我的手里,我赋予了它新的生命,正如霍金之于物理学,我将之平易的阐述,将复杂的问题简单化,有什么能快乐甚此呢? 也许该怀念远古时期的希腊,没有健全的知识,苏格拉底就用他的思维来推导,可以想象当时他快乐的神态。
      
       诸多问题,解决问题有很多,如果非要打破沙锅问到底,南无阿弥陀佛,你成佛了。因为最终的缘由只有一个,所以看看这本书,你知道了 C++ 在你的计算机内存里怎样的形式存放,又以怎样的形式来运转,从而促成你所要表达的界面。
      
       好比我们要同一个人过活,非要深刻的了解它不可。同样的,我们如果要吃 C++ 的饭碗,那么,你就要扒光它的衣服,到里面探个究竟了。。。
  •     书中有不少错误,自己去印证书中的一些模型发现是有区别的.
      
      但还是好书,我不知道能多大程度提升编程质量,因为我不是抱着这个目的读的.但对喜欢了解底层的人来说,这书绝对不乏味
 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7