c 中 子類物件與父類物件的記憶體關係

2021-06-03 15:52:12 字數 501 閱讀 9529

問題:如題。假設有父類a與子類b

a例項化乙個物件a   b例項化乙個物件b

那麼在記憶體中 a與b的位址關係是什麼。是他們的首位址都一樣嗎?

解答:

他們是沒有必然關係的。就跟你隨便生成另外兩個其他型別的變數一樣。當然,你例項化的物件b跟a有關係。

b物件開頭的部分4個位元組是虛函式表,接著就是基類的資料成員,然後是子類的資料成員。

對方:c++中的類物件例項化後存在記憶體中的什麼位置,堆還是棧?

我(思索,但不確定): 既可能在棧又可能在堆

對方:什麼情況下在棧,什麼情況下在堆?

我:如果類物件例項作為區域性變數出現,放在棧中,作用域結束,類例項所佔記憶體釋放,如果是通過指標的形式 new class就在堆中建立,

在堆中的要手動刪除。

對方:棧的分配**,誰來控制?

我:作業系統

對方:那還要類例項的析構函式做什麼?

我(有點暈)

C 子類物件當父類物件使用

子類物件當父類物件使用 1 把子類物件直接賦值給父類物件 等號左邊是父類物件,等號右邊是子類物件 子類物件賦值給父類物件,僅僅把繼承自父類部分成員函式賦值給父類物件 賦值完成後等號左邊依然是乙個父類物件 derived d base b b d 把子類物件d當成父類物件來使用 父類物件不能賦值給子類...

父類引用子類物件

父類引用子類物件 package test class fruit1 string get1 父類引用子類物件 如果父類的方法可以被重寫 靜態方法不能被重寫,因為它是隨著類的建立而存在於記憶體,只有乙份 並且已經重寫,那麼呼叫的是子類的方法 反之,則呼叫父類裡的方法 public class fru...

分清楚父類物件和子類物件的記憶體分配

一.背景 之前一直對類記憶體分布和物件真正的記憶體分布沒有清楚的理解.看到類記憶體分布時,子類中的變數有一部分是來自父類的,就認為在生成父類物件和子類物件時,他們共有的變數在記憶體上是重疊的.後來想了一下,應該不是這麼回事,就實地考察了下.二.舉例驗證 有如下的繼承關係,有分別定義了對應的物件,考察...