程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> c++對象模型讀書筆記

c++對象模型讀書筆記

編輯:vc教程

1、什麼是C++對象模型

1、語言中直接支持面向對象程序設計的部分

2、各種支持的底層實現機制

2、C語言是面向過程的:

語言本身沒有支持數據和函數之間的關聯性,是程序性的,分布在各個以功能函數為導向的函數中他們處理的是共同的外部數據。

C++用獨立的“抽象數據類型”ADT實現

3、C++在布局以及存取時間上主要額外負擔的VIRUTAL引起的

1、virtual function機制

2、virtual base class多次繼承系統中的基類,有一個單一而被共享的實體

4、C++有兩種類成員數據類型[class data type]:

static,nonstatic

有三種類成員函數類型[class member function]:static,nonstatic,virtual

5、C++對象模型

nonstatic data member非靜態數據成員被置於類對象中static data member靜態成員函數被置放在所有類對象之外[被放置在程序中的data segment中] static function和nonstatic function也放在類對象之外static function在我看來類似於nonmember function virtual function

1、每一個類產生一對指向virtual function的指針,放置在表格中virtual table(vtbl)

2、類對象添加了一個指針,指向vtbl,為vptr

6、在虛擬繼承情況下,base class不管在繼承串連中被派生過多少次,永遠只存在一個實體subobject

7、關鍵詞struct和class的差異:

struct體現了數據萃取的概念

class體現了adt(abstract data type)概念

我看來只要是思想上的差異,沒有其他的差別

8、C++程序設計模型直接支持三種“程序設計典范”,也就是不只是OO了

1、程序模型:面向過程的設計

2、抽象數據類型模型:我看來解釋數據萃取型STRUCT

3、面向對象模型

9、一個指針,不管它指向哪一個數據類型,指針本身需要的內存大小是固定的,指向不同類型之各指針之間的差異,即不在其指針表示法的不同,也不在其內容的不同,而在於它尋址出來的OBJECT類型的不同,我看來指針的類型就是為了通知編譯器,讓編譯器的有不同的處理方式

10、多態就是指使用虛函數嗎?

11、當一個基類被直接初始化(或者被指定為)一個繼承類時,繼承類就會被切割,以塞進較小的基類內存中

12、一個類如果沒有自定義的構造函數,編譯器會生成一個卻省的構造函數,但是這個構造函數是沒有具體作用的被合成的構造函數,只滿足編譯器的需要,而不是滿足程序的需要合成的構造函數只對基類對象和類對象成員函數的初始化,不對其他非靜態DATA MEMBER初始化不是任何沒有卻省構造函數的類都會被合成出一個卻生構造函數

13、內聯函數有靜態連接,不會被檔案以外者看到,如果內聯函數很復雜,不適合做成內聯函數,編譯器會合成一個明確的、非內聯的函數實體

14、如果一個類含有一個或者一個以上的類對象成員函數,類的構造函數會調用每個類對象的卻生構造函數

15、拷貝構造函數是類的一個參數是其類名的構造函數,如果類中用戶沒有明確定義,內部是以所謂的DEFAULT memberwise initialization,即卻省的對每個成員函數初始化手法完成根據bit來拷貝構造函數

16、堅持所有的member的初始化操作在member initialization list中完成,初始化順序不是按照initialization中的順序完成,是按照類中成員定義的順序完成,編譯器編譯時將initialization放置在構造函數用戶自定的編碼前

17、一個空類大小不是為空的,有一個隱諱的1字節,那時編譯器安插進取的一個char,使得這個類在內存中分配獨一無二的地址。[我不知道是否所有的編輯器都是如此?]

18、類的大小跟機器和編輯器有關,受到三種因素的印象

1、語言本身所造成的額外負擔

2、編譯器對特殊情況進行的優化處理

3、alignment的限制,alignment就是將某數的整倍數,例如32位計算機上,一般為4字節

19、不管類產生多少個對象,靜態數據成員永遠只存在一份實體

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved