簡體   English   中英

派生類的實例化是否為基類的私有成員分配內存?

[英]Does an instantiation of a derived class allocate memory for private members of base class?

我想這個話題是我需要問的。 關於這個主題的一點解釋會很好。 請清楚一些問題,例如為什么或為什么不?

例:

class A {
 private:
  int a;
};

class B : A {
 int b;
};

int main (int argc, char **argv) {
 B *p = new B(); // Does this allocate memory for a?
}

是。 類對象包含其所有直接非靜態數據成員以及任何基類子對象的成員。 訪問說明符沒有區別; 它們僅限制名稱的使用位置。

這取決於你的意思是什么分配 :它不會做一個堆分配或東西。 派生對象將包含從基礎繼承的成員。 這就是派生類的所有基類都可以看作是子對象。 派生類對象將包含所有這些子對象,並且還將確保它們被正確構造/銷毀。

是的它也會為A分配內存。

因為當您從另一個類繼承一個class並且在創建派生類的object時,Complier將分配等於派生類+基類大小的內存,這樣就no loss of data. base class members也可以從derived class.訪問derived class.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM