動態聯編學習 二 物件型別資訊

2021-06-16 02:15:01 字數 1009 閱讀 7123

為了證明我們的猜想,我們用下面的乙個程式進行測試,下面的程式將獲取普通的類和包含虛函式的類的位元組大小。程式**如下。

vc6.0中執行結果如下:

sizeof

(int)4

sizeof

(class shape_novirtual):4

sizeof

(void*):4

sizeof

(class shape_virtual1):8

sizeof

(class shape_virtual2):8

press any key to continue

從上面可以看出,沒有虛函式的類shape_novirtual

的大小為4,正好為int

a的大小。而帶有虛函式的類shape_virtual1和shape_virtual2的大小除了int

a的大小還多出了4格個位元組的大小,這個大小正好是void*指標的大小。到現在為止我們基本上可以說帶有虛函式的物件自身確實插入了一些指標資訊,而且這個指標資訊並不隨著虛函式的增加而增大。

如果我們將每個類的成員變數int

a去掉,vc6.0執行結果就會變成下面的情況。

sizeof

(int)4

sizeof

(class shape_novirtual):1

sizeof

(void*):4

sizeof

(class shape_virtual1):4

sizeof

(class shape_virtual2):4

press any key to continue

上面的執行結果應該讓人感到例外。既然size(int)為4,現在沒有了這個成員變數,類shape_novirtual

應該位元組大小為0,但事實上c++編譯器不允許物件為零長度。試想乙個長度為0的物件在記憶體中怎麼存放?怎麼獲取它的位址?為了避免這種情況,c++強制給這種類插入乙個預設成員,長度為1。如果有自定義的變數,變數將取代這個預設成員。

C 基礎(二)物件和型別

類和結構 類和結構的區別是在記憶體中的儲存方式 類是儲存在heap上的引用型別,而結構是儲存在stack上的值型別 訪問方式,結構不支援繼承。類和結構都有new來宣告例項。類資料成員包含字段 常量和事件。函式成員包括方法 屬性 建構函式 finalizer 運算子及索引器。在c 中,可以宣告與類無關...

json學習筆記(二) 物件 陣列

迴圈物件 使用for in迴圈物件的屬性,使用中括號 訪問屬性值 如 var myobj for x inmyobj 巢狀物件如 myobj 同樣使用 或者 來訪問巢狀物件 x myobj sites site1 或者x myobj sites site1 修改值 myobj sites site1...

JQuery學習筆記(二) 物件訪問

物件訪問篇講的主要是 對jquery物件的一些訪問方法 get 訪問jquery物件中的dom物件集合 var buttonl input button get buttonl就是 input button 的dom集合 each callback 遍歷jquery物件中的dom集合中的所有dom物...