程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 深入探索C++對象模型(1) 關於對象(思維導圖)

深入探索C++對象模型(1) 關於對象(思維導圖)

編輯:C++入門知識

對於上面這個Point類,在內存中是怎麼布置起來的呢?

根據以上這些問題,我們可以給出如下的對象布局方式:

這裡使用了二層繼承 ZooAnimal <--- Bear <--- Panda.

思考下面這段代碼,在內存中的布局是怎樣的呢?

    ZooAnimal *pza;       

    Panda *pp =  Panda    
= &

根據注釋上所說,我們在內存中的相應的位置,按順序設想一下該段代碼執行後內存中棧和堆的布局情況:

image

這個圖中並沒有考慮棧和堆的增長方向不同的因素,所以這裡也就不深究。

棧中發生了什麼很容易看得出,我們著重看一下在堆中的Panda對象的內存分布:

發現Panda對象被分成了三個部分,Panda對象 = Panda對象自己的一部分+Bear對象部分(Bear對象部分 = Bear對象自己的一部分 +基類ZooAnimal部分)

在棧中的Bear對象也是同樣的道理。

由此圖,我們大致了解了子類在內存中的布局。

因此,父類和子類之間的類型轉換,即多態的實現,就可以認為是指針的覆蓋范圍的變換,而對內存布局沒有影響。

 

小結:

簡單探討了一下對象在內存中的布局問題,以及如果通過布局來實現繼承和多態的。

 

如果不正確的地方歡迎指正。

參考資料:

《深入理解C++對象模型》

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