C++ 新經典:對象模型
內容描述
本書是一部介紹C++對像模型知識的書,意在探究C++幕後的秘密,講述C++編譯器的故事。
內容涉及很多不被常人所知的C++對象內部工作原理以及底層的一些具體實現機制方面的知識。
本書共分為7章:第1章介紹書中範例所涉及的演示環境搭建、如何創建基本的C++程序,
以及對程序進行跟蹤和斷點調試的方法。
第2章的主題是對象,包括以對象所佔內存大小為講解切入點詳述對象結構的發展和演化;
構造、拷貝構造、移動構造函數語義;深淺拷貝、成員初始化列表等內容。
第3章的主題是虛函數,包括虛函數表指針、虛函數表的概念和細節;
更進一步涉及多重繼承的虛函數表分析和各種輔助工具的講解。
第4章的主題是數據語義學,包括類中的數據成員佈局、數據成員存取,
涉及單一繼承、單類單繼承、多重繼承等情況下的數據成員佈局;
二層、三層結構時虛基類表內容、與this指針調整等問題。
第5章的主題是函數語義學,包括普通成員函數、虛函數、靜態成員函數調用方式;
靜態、動態綁定以及多態性的詳細體現分析和析構函數必須是虛函數原因的著重解釋;
多重繼承第二虛基類詳談、RTTI實現原理、inline函數細說等內容。
第6章的主題是對象構造語義學,包括對象構造順序,對象複製、析構函數語義;
局部、全局對象的構造和析構,臨時對象詳細探討等內容。
第7章的主題是模板實例化語義學,重點對模板的實例化進行了詳細的分析。
這是一本C++進階類圖書,要求學習者俱備一定的C++開發基礎,適合作為C++編程人員的參考讀物。
目錄大綱
目錄
第1章演示環境介紹和準備
1.1演示環境搭建說明
1.2創建最基本的能運行的C++程序
1.3 Visual Studio中程序的調試方法
第2章對象
2.1類對象所佔用的空間
2.2對象結構的發展和演化
2.3 this指針調整
2.4分析obj(目標文件)與構造函數語義
2.5拷貝構造函數語義與移動構造函數語義
2.5.1拷貝構造函數語義
2.5.2移動構造函數語義
2.6程序轉換語義
2.6.1定義時初始化對象
2.6 .2參數的初始化
2.6.3返回值初始化
2.7程序的優化
2.7.1從開發者層面的優化
2.7.2從編譯器層面的優化
2.8程序優化續、拷貝構造函數續與深淺拷貝
2.8.1程序優化續
2.8.2拷貝構造續
2.8.3深淺拷貝
2.9成員初始化列表
2.9.1何時必須用成員初始化列表
2.9.2使用初始化列表的優勢
2.9.3初始化列表的細節探究
第3章虛函數
3.1虛函數表指針位置分析
3.2繼承關係作用下虛函數的手工調用
3.3虛函數表分析
3.4多重繼承虛函數表分析
3.5輔助工具與vptr、vtbl創建時機
3.5.1使用輔助工具查看虛函數表
3.5.2虛函數表的創建時機
3.6單純的類不純時引發的虛函數調用問題
第4章數據語義學
4.1數據成員綁定時機
4.1.1成員函數函數體的解析時機(整個類定義完畢後)
4.1.2成員函數參數類型的確定時機(最近碰到原則)
4.2進程內存空間佈局
4.3數據成員佈局
4.3.1觀察成員變量地址規律
4.3.2邊界調整與字節對齊
4.3.3成員變量偏移值的打印
4.4數據成員的存取
4.4.1靜態成員變量的存取
4.4.2非靜態成員變量的存取
4.5單一繼承下的數據成員佈局
4.6單類單繼承虛函數下的數據成員佈局
4.6.1單個類帶虛函數的數據成員佈局
4.6.2單一繼承父類帶虛函數的數據成員佈局
4.6.3單一繼承父類不帶虛函數的數據成員佈局
4.7多重繼承數據佈局與this調整深談
4.7.1單一繼承數據成員佈局this指針偏移知識補充
4.7.2多重繼承且父類都帶虛函數的數據成員佈局
4.8虛基類問題的提出和初探
4.8.1虛基類(虛繼承/虛派生)問題的提出
4.8.2虛基類初探
4.9兩層結構時虛基類表內容分析
4.9.1虛基類表內容之5~8字節內容分析
4.9.2各種形式的繼承
4.9.3虛基類表內容之1~4字節內容分析
4.10三層結構時虛基類表內容分析與虛基類設計原由
4.1O.1三層結構時虛基類表內容分析
4.10.2虛基類為什麼這樣設計
4.11成員變量地址、偏移與指針等重申
4.11.1對象成員變量內存地址及其指針
4.11.2成員變量的偏移值及其指針
4.11.3成員變量指針和不指向任何成員變量的成員變量指針
第5章函數語義學
5.1普通成員函數調用方式
5.2虛成員函數與靜態成員函數調用方式
5.2.1虛成員函數調用方式
5.2.2靜態成員函數調用方式
5.3虛函數地址問題的vcall引入
5.4靜動態類型、綁定、坑點與多態體現深談
5.4 .1靜態類型和動態類型
5.4.2靜態綁定和動態綁定
5.4.3繼承的非虛函數坑
5.4.4虛函數的動態綁定
5.4.5重新定義虛函數的缺省參數坑
5.4.6 C++中的多態性
5.5單繼承虛函數趣味性測試和回顧
5.5.1單繼承下的虛函數
5.5.2回顧和一些小試驗
5.6多繼承虛函數深釋、第二基類與虛析構必加
5.6.1多繼承下的虛函數
5.6.2如何成功刪除用第二基類指針new出來的子類對象
5.6.3父類非虛析構函數時導致的內存洩露演示
5.7多繼承第二基類虛函數支持與虛繼承帶虛函數
5.7.1多重繼承第二基類對虛函數支持的影響(this指針調整作用)
5.7.2虛繼承下的虛函數
5.8 RTTI(運行時類型識別)回顧與存儲位置簡介
5.8.1 RTTI(運行時類型識別)簡單回顧
5.8.2 RTTI實現原理
5.8.3 vptr、vtbl與RTTI的type_info信息創建時機
5.9函數調用與繼承關係性能
5.9.1函數調用中編譯器的循環代碼優化
5.9.2繼承關係深度增加,開銷也增加
5.9.3繼承關係深度增加,虛函數導致的開銷增加
5.10指向成員函數的指針和vcall
5.10.1不用類對象能否調用類的虛函數和普通成員函數
5.10.2指向成員函數的指針
5.10.3指向虛成員函數的指針和vcall
5.10.4 vcall在繼承關係中的體現
5.11 inline函數回顧和擴展
5.11.1 inline函數回顧
5.11.2 inline擴展
第6章對象構造語義學
6.1繼承體系下的對象構造
6.1.1對象的構造順序
6.1.2虛函數
6.1.3構造函數中對虛函數的調用
6.2對象複製語義學與析構函數語義學
6.2.1對象
作者介紹
王健偉
男,1976年9月生,網名狂想(KuangXiang),1995年畢業於哈爾濱工程大學計算機及應用專業,
擁有20多年軟件開發經驗,參與開發過數十個實際項目,涉及網絡通信、網絡安全、網絡遊戲等領域,
具備極其深厚的軟件開發實戰經驗。曾參與創辦深圳知名網絡安全公司安絡科技有限公司,
是中國首套網絡安全在線掃描評估系統項目負責人、全球同服獨立遊戲《冒險之路》製作人。