深度探索C++對象模型

出版時間:2001-5  出版社:華中科技大學(xué)出版社  作者:[美] Stanley B. Lippman  頁數(shù):320  譯者:侯捷  
Tag標(biāo)簽:無  

內(nèi)容概要

本書重點(diǎn):探索“對象導(dǎo)向程序所支持的C++對象模型”下的程序行為。對于“對象導(dǎo)向性質(zhì)之基礎(chǔ)實現(xiàn)技術(shù)”以及“各種性質(zhì)背后的隱含利益交換”提供一個清楚的認(rèn)識。檢驗由程序變形所帶來的效率沖擊。提供豐富的程序范例、圖片,以及對象導(dǎo)向觀念和底層對象模型之間的效率測量。
C++成山似海的書籍堆中,這一本不是嬰幼兒奶粉,也不是較大嬰兒奶粉,它是成人專用的低脂高鈣特殊奶粉。
對于C++底層機(jī)制感興趣的讀者,這本書會給你“漫卷詩書喜欲狂”的感覺。
了解C++ Object Model,是學(xué)習(xí)Component Object
Model的最短路線。
如果你是一位C++程序員,渴望對于底層知識獲得一個完整的了解,那么Inside The
C++ Object Model正適合你。
關(guān)于作者:Stanley Lippman目前是華特迪斯尼主題動畫公司(Walt
Disney Feature Animation)的主要軟件工程師。他曾經(jīng)在AT&T貝爾實驗室領(lǐng)導(dǎo)cfront
3.0和2.1版的編譯器開發(fā)小組。他也是貝爾實驗室中由Bjame
Stroustrup所領(lǐng)導(dǎo)的Foundation專案組中的一員,負(fù)責(zé)對象模型并研究C++程序開發(fā)環(huán)境。Stan著有極為成功的C++
Primer一書,也發(fā)表過許多C++方面的論文。Stan最近剛從C++
Report的編輯位置上“退隱”,他曾在那個位置上做了4年。他的C++論述遍及全球。
關(guān)于譯者:侯捷,海峽兩岸著名的電腦技術(shù)自由作家,對于技術(shù)的鉆研和發(fā)表,有獨(dú)特的品性與堅持。作品涵蓋著、譯、評三方面,散見于各種刊特、媒體、網(wǎng)站論壇,深受讀者喜愛和尊敬。

作者簡介

Stanley
B.Lippman的職業(yè)是提供關(guān)于C++和面向?qū)ο蟮挠?xùn)練、咨詢、設(shè)計和指導(dǎo)。他在成為一名獨(dú)立咨詢顧問之前,曾經(jīng)是迪士尼動化公司的首席軟件設(shè)計師。當(dāng)他在AT&T
Bell實驗室的時候,領(lǐng)導(dǎo)了cfront 3.0版本和2.1版本的編譯器開發(fā)組。他也是Bjarne
Stroustrup領(lǐng)導(dǎo)的Bell實驗室Fo

書籍目錄

本立道生(侯捷 譯序)
目錄
前言(Stanley B.Lippman)
第0章 導(dǎo)讀(譯者的話)
第1章 關(guān)于對象(Object Lessons)
加上封裝后的布局成本(Layout Costs for Adding Encapsulation)
1.1 C++模式模式(The C++ Object Model)
簡單對象模型(A Simple Object Model)
表格驅(qū)動對象模型(A Table-driven Object Model)
C++對象模型(The C++ Object Model)
對象模型如何影響程序(How the Object Model Effects Programs)
1.2 關(guān)鍵詞所帶來的差異(A Keyword Distinction)
關(guān)鍵詞的困擾
策略性正確的struct(The Politically Correct Struct)
1.3 對象的差異(An Object Distinction)
指針的類型(The Type of a Pointer)
加上多態(tài)之后(Adding Polymorphism)
第2章 構(gòu)造函數(shù)語意學(xué)(The Semantics of constructors)
2.1 Default Constructor的建構(gòu)操作
“帶有Default Constructor”的Member Class Object
“帶有Default Constructor”的Base Class
“帶有一個Virual Function”的Class
“帶有一個virual Base class”的Class
總結(jié)
2.2 Copy Constructor的建構(gòu)操作
Default Memberwise Initialization
Bitwise Copy Semantics(位逐次拷貝)
不要Bitwise Copy Semantics!
重新設(shè)定的指針Virtual Table
處理Virtual Base Class Subobject
2.3 程序轉(zhuǎn)換語意學(xué)(Program Transformation Semantics)
明確的初始化操作(Explicit Initialization)
參數(shù)的初始化(Argument Initialization)
返回值的初始化(Return Value Initialization)
在使用者層面做優(yōu)化(Optimization at the user Level)
在編譯器層面做優(yōu)化(Optimization at the Compiler Level)
Copy Constructor:要還是不要?
摘要
2.4 成員們的初始化隊伍(Member Initialization List)
第3章 Data語意學(xué)(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
只要繼承不要多態(tài)(Inheritance without Polymorphism)
加上多態(tài)(Adding Polymorphism)
多重繼承(Multiple Inheritance)
虛擬繼承(Virtual Inheritance)
3.5 對象成員的效率(Object Member Efficiency)
3.6 指向Data Members的指針(Pointer to Data Members)
“指向Members的指針”的效率問題
第4章 Function語意學(xué)(The Semantics of Function)
4.1 Member的各種調(diào)用方式
Nonstatic Member Functions(非靜態(tài)成員函數(shù))
Virtual Member Functions(虛擬成員函數(shù))
Static Member Functions(靜態(tài)成員函數(shù))
4.2 Virtual Member Functions(虛擬成員函數(shù))
多重繼承下的Virtual Functions
虛擬繼承下的Virtual Functions
4.3 函數(shù)的效能
4.4 指向Member Functions的指針(Pointer-to-Member Functions)
支持“指向Virtual Member Functions”之指針
在多重繼承之下,指向Member Functions的指針
“指向Member Functions之指針”的效率
4.5 Inline Functions
形式對數(shù)(Formal Arguments)
局部變量(Local Variables)
第5章 構(gòu)造、解構(gòu)、拷貝 語意學(xué)(Semantics of Construction,Destruction,and
Copy)
純虛擬函數(shù)的存在(Presence of a Pure Virtual Function)
虛擬規(guī)格的存在(Presence of a Virtual Specification)
虛擬規(guī)格中const的存在
重新考慮class的聲明
5.1 無繼承情況下的對象構(gòu)造
抽象數(shù)據(jù)類型(Abstract Data Type)
為繼承做準(zhǔn)備
5.2 繼承體系下的對象構(gòu)造
虛擬繼承(Virtual Inheritance)
初始化語意學(xué)(The Semantics of the vptr Initialization)
5.3 對象復(fù)制語意學(xué)(Object Copy Semantics)
5.4 對象的功能(Object Efficiency)
5.5 解構(gòu)語意學(xué)(Semantics of Destruction)
第6章 執(zhí)行期語意學(xué)(Runting Semantics)
6.1 對象的構(gòu)造和解構(gòu)(Object Construction and Destruction)
全局對象(Global Objects)
局部靜態(tài)對象(Local Static Objects)
對象數(shù)組(Array of Objects)
Default Constructors和數(shù)組
6.2 new和delete運(yùn)算符
針對數(shù)組的new語意
Placement Operator new的語意
6.3 臨時性對象(Temporary Objects)
臨時性對象的迷思(神話、傳說)
第7章 站在對象模型的類端(On the Cusp of the Object Model)
7.1 Template
Template的“具現(xiàn)”行為(Template Instantiation)
Template的錯誤報告(Error Reporting within a Template)
Template中的名稱決議方式(Name Resolution within a Template)
Member Function的具現(xiàn)行為(Member Function Instantiation)
7.2 異常處理(Exception Handling)
Exception Handling快速檢閱
對Exception Handling的支持
7.3 執(zhí)行期類型識別(Runtime Type Identification,RTTI)
Type-Safe Downcast(保證安全的向下轉(zhuǎn)型操作)
Type-Safe Dynamic Cast(保證安全的動態(tài)轉(zhuǎn)型)
References并不是Pointers
Typeid運(yùn)算符
7.4 效率有了,彈性呢?
動態(tài)共享函數(shù)庫(Dynamic Shared Libraries)
共享內(nèi)存(Shared Memory)

媒體關(guān)注與評論

前言差不多有10年之久,我在貝爾實驗室(Bell Laboratories)埋首于C++的實現(xiàn)任務(wù)。最初的工作是在cfront上面(Bjarne Stroustrup的第一個C++編譯器),從1986年的1.1版到1991年9月的3.0版,然后移轉(zhuǎn)到Simplifier(這是我們內(nèi)部的命名),也就是Found~ion項目中的C++對象模型部分。在Simplifier設(shè)計期間,我開始醞釀這本書。    Foundation項目是什么?在Bjarne的領(lǐng)導(dǎo)下,貝爾實驗室中的一個小組探索著以C++完成大規(guī)模程序設(shè)計時的種種問題的解決之道。Foundation項目是我們?yōu)榱藰?gòu)造大系統(tǒng)而努力定義的一個新的開發(fā)模型;我們只使用C++,并不提供多重語言的解決方案。這是個令人興奮的工作,一方面是因為工作本身,一方面是因為工作伙伴:Bjarne、Andy Koenig、Rob Murray、Martin Carroll、Judy Ward、Steve Buroff、Peter Juhl,以及我自己。Barbara Moo管理我們這一群人(Bjarne和Andy除外)。Barbara Moo常說管理一個軟件團(tuán)隊,就像放牧一群驕傲的貓。    我們把Foundation想象成一個核心,在那上面,其它人可以為使用者鋪設(shè)一層真正的開發(fā)環(huán)境,把它整修為他們所期望的UNIX或Smalltalk模型。私底下我們把它稱為Grail(傳說中耶穌最后的晚餐所用的圣杯),人人都想要,但是從來沒人找到過!    Grail使用一個由Rob Murray發(fā)展出來并命名為ALF的面向?qū)ο髮哟谓Y(jié)構(gòu),提供一個永久的、以語意為基礎(chǔ)的表現(xiàn)法。在Grail中,傳統(tǒng)編譯器被分解為數(shù)個各自分離的可執(zhí)行文件。parser負(fù)責(zé)建立程序的ALF表現(xiàn)法。其它每一個組件(比如type checking、simplification,code generation)以及工具(比如browser)都在程序的一個ALF表現(xiàn)體上操作(并可能加以擴(kuò)展)。Simplifier是編譯器的一部分,處于typechecking和codegeneration之間。Simplifier這個名稱是由Bjarne所倡議的,它原本是cfront的一個階段(phase)。    在type checking和code generation之間,Simplifier做什么事呢?它用來轉(zhuǎn)換內(nèi)部的程序表現(xiàn)。有三種轉(zhuǎn)換風(fēng)味是任何對象模型都需要的:  1.與編譯器息息相關(guān)的轉(zhuǎn)換(Implementation,dependent transformations)    這是與特定編譯器有關(guān)的轉(zhuǎn)換。在ALF之下,這意味著我們所謂的“tentative”nodes。例如,當(dāng)parser看到這個表達(dá)式:    fct();    它并不知道是否(a)這是一個函數(shù)調(diào)用操作,或者(b)這是overloaded call operator在class object fct上的一種應(yīng)用。默認(rèn)情況下,這個式子所代表的是一個函數(shù)調(diào)用,但是當(dāng)(b)的情況出現(xiàn)時,Simplifier就要重寫并調(diào)換call subtree。  2.語言語意轉(zhuǎn)換(Language semantics transformations)    這包括constructor/destructor的合成和擴(kuò)展、memberwise初始化、對于memberwise copy的支持、在程序脛邪膊錭onversion operators、臨時性對象,以及對constructor/destructor的調(diào)用。  3.程序代碼和對象模型的轉(zhuǎn)換(Code and object model transformations)    這包括對virtual functions、virtual base class和inheritance的一般支持、new和delete運(yùn)算符、class objects所組成的數(shù)組、local static class instances、帶有非常量表達(dá)式(nonconstant expression)之global object的靜態(tài)初始化操作。我對Simplifier所規(guī)劃的一個目標(biāo)是:提供一個對象模型體系,在其中,對象的實現(xiàn)是一個虛擬接口,支持各種對象模型。    最后兩種類型的轉(zhuǎn)換構(gòu)成了本書的基礎(chǔ)。這意味著本書是為編譯器設(shè)計者而寫的嗎?不是,絕對不是!這本書是由一位編譯器設(shè)計者針對中高級C++程序員所寫的。隱藏在這本書背后的假設(shè)是,程序員如果了解C++對象模型,就可以寫出比較沒有錯誤傾向而且比較有效率的代碼。

編輯推薦

《深度探索C++對象模型》涵蓋了C++對象模型的語意暗示,并指出這個模型是如何影響你的程序的。C++成山似海的書籍堆中,這一本不是嬰幼兒奶粉,也不是較大嬰兒奶粉,它是成人專用的低脂高鈣特殊奶粉。對于C++底層機(jī)制感興趣的讀者,這《深度探索C++對象模型》會給你"漫卷詩書喜欲狂"的感覺。了解C++ Object Model,是學(xué)習(xí)Component Object Model的最短路線。如果你是一位C++程序員,渴望對于底層知識獲得一個完整的了解,那么Inside The C++ Object Model正適合你。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    深度探索C++對象模型 PDF格式下載


用戶評論 (總計19條)

 
 

  •   本書不適合初學(xué)者,需要一定的c++基礎(chǔ)才能有所收獲
  •   經(jīng)典的書籍,修煉內(nèi)功
  •   該書適合有一定功底的C++學(xué)習(xí)者。
  •   書很好,和學(xué)校的一樣
  •   這本書的內(nèi)容不錯,以前看過,重新學(xué)習(xí)一下
  •   學(xué)C++,看這本書沒人會后悔的,當(dāng)然要是看不懂那就沒辦法了。好書就是好書
  •   沙發(fā)~~
  •   這書非常好,經(jīng)典
  •   深度探索C 對象模型
  •   這本書名氣很大,很多人推薦
  •   物流要加強(qiáng)
  •   想要深入了解C 實現(xiàn)機(jī)制的可以看
  •   聽名字很給力
  •   書質(zhì)量很不錯,侯捷老師的書,內(nèi)容很有深度
  •     很好很好,C++正要學(xué)習(xí),還有C語言,大家能推薦一本經(jīng)典的書不,想學(xué)習(xí)linux驅(qū)動開發(fā)。不知有經(jīng)典的沒。
      剛看一少半,準(zhǔn)備春節(jié)之前看完,哈哈哈
      很好很好,C++正要學(xué)習(xí),還有C語言,大家能推薦一本經(jīng)典的書不,想學(xué)習(xí)linux驅(qū)動開發(fā)。不知有經(jīng)典的沒。
      剛看一少半,準(zhǔn)備春節(jié)之前看完,哈哈哈
  •     我說下我的經(jīng)驗吧,希望可以幫到后來者。
       我覺得這本書并不像很多人說的那樣煎熬,關(guān)鍵是找一個實際的編譯系統(tǒng)實踐一下,看好類的內(nèi)存布局和一些7788的反匯編,有了實踐的基礎(chǔ)去看就很簡單了的其實。
      我花了大概半個月時間,在VS下摸索了類的內(nèi)存布局,然后才看的這本書,我20個小時就看完了,而且基本上都懂。
      
      有興趣可以去看下我摸索VS下C++類對象內(nèi)存布局的時候?qū)懴碌墓P記,大概5~60頁的word吧。像我這樣來學(xué)的話我估計就不會有那么多人喊什么難了,關(guān)鍵的實踐,得多花時間去實踐,光靠腦子想是沒有意義的。
      我的筆記在博客園:
      http://www.cnblogs.com/lindeshi/archive/2012/10/20/2732590.html
      歡迎膜拜以及指正討論等等。
  •     做C++開發(fā)8,9年了,雖然個人認(rèn)為也積累了一些語言方面的開發(fā)經(jīng)驗,可是看到這本書以后,發(fā)現(xiàn)自己了解的內(nèi)容還是太膚淺了,雖然這本書中介紹的內(nèi)容并不能直接用于平時的項目開發(fā),可是它能夠讓你對這門語言有一個更為深入的了解,同時也能夠?qū)γ嫦驅(qū)ο蟮木幊趟枷胗辛烁鼮樯钊氲睦斫狻?br />   自從拿到這本書以后,我已經(jīng)連續(xù)通讀過三遍了,每一次都能夠得到更多更新的的體會。
  •      我是以日記的形式寫下,寫完發(fā)覺有些書評的性質(zhì),就發(fā)到此處。
      
       首先說 《深度探索 C++ 對象模型》 是一本書,一本介紹 C++ 對象模型的書,這是一本獨(dú)一無二的從編譯器的解讀來闡述 C++ 對象模型的書籍,因著編譯器的設(shè)計者和學(xué)習(xí)者全球本來就少,加之深度研究 C++ 的更是二月里的29號,少之又少。所以界外人士不可知,正常;界內(nèi)人士不可知,可諒。
      
       然書非界不能讀也,對于此論,我頗贊成:我有足夠的書籍來證明。在我書架上的,恰恰是每個領(lǐng)域頂端的專著,權(quán)威而且多大絕版。我也想多少人那樣求之不得,最后求得了,反倒不求了。他們是靜靜的躺在書架,只能證實我當(dāng)初的野心,也象征性的說明我后來的俗氣。直到某天某個時刻,有人問我些許問題了,我開始想了,想到了所有的情況,最后定格在某本書上,然后下載電子書,查找內(nèi)容。最后卻猛拍腦門,我腦門后面不是有嗎?這才看到它們得意而蔑視的姿態(tài)。
      
       像這樣一本 <深度探索 C++ 對象模型》更甚。以至于我每次掃描書架,全然不見他瘦弱的身軀?;蛟S它太薄了,容不在我狂妄的視野里;又或許它太矮了,根本沒有入我眼的條件。就這樣,它默默無聞,我渾然不知。直到同學(xué)問起我一些C++ 的語法相關(guān)概念的時候,我給他們解釋語法,他們卻問為何如此?為何如此,這個得問編譯器了。我才知曉這本書的價值到了展現(xiàn)的時候了,我再次看這本書,里面雖然不是嬰幼兒奶粉,是成人專用的低脂高鈣特殊奶粉,卻恰巧生在了我的手里,我賦予了它新的生命,正如霍金之于物理學(xué),我將之平易的闡述,將復(fù)雜的問題簡單化,有什么能快樂甚此呢? 也許該懷念遠(yuǎn)古時期的希臘,沒有健全的知識,蘇格拉底就用他的思維來推導(dǎo),可以想象當(dāng)時他快樂的神態(tài)。
      
       諸多問題,解決問題有很多,如果非要打破沙鍋問到底,南無阿彌陀佛,你成佛了。因為最終的緣由只有一個,所以看看這本書,你知道了 C++ 在你的計算機(jī)內(nèi)存里怎樣的形式存放,又以怎樣的形式來運(yùn)轉(zhuǎn),從而促成你所要表達(dá)的界面。
      
       好比我們要同一個人過活,非要深刻的了解它不可。同樣的,我們?nèi)绻?C++ 的飯碗,那么,你就要扒光它的衣服,到里面探個究竟了。。。
  •     書中有不少錯誤,自己去印證書中的一些模型發(fā)現(xiàn)是有區(qū)別的.
      
      但還是好書,我不知道能多大程度提升編程質(zhì)量,因為我不是抱著這個目的讀的.但對喜歡了解底層的人來說,這書絕對不乏味
 

250萬本中文圖書簡介、評論、評分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號-7