出版時間: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
無
評論、評分、閱讀與下載