c 中與繼承相關的概念

2021-08-30 15:20:30 字數 1340 閱讀 1673

c++中繼承有三種:共有繼承、保護繼承、私有繼承,三個關鍵字分別是:public、protected、private。每種繼承的訪問許可權不一樣,談到繼承的訪問許可權首先得清楚乙個類中public、protected、private關鍵字修飾的屬性和方法其對類建立出來的物件的訪問許可權。
小結: 類的內部之間可以訪問其屬性和方法(不管是public、protected、private修飾即」同類無私有」)。類建立的例項,類的例項可以訪問public屬性和方法,不能訪問protected和private屬性和方法。

乙個類有多個直接基類的繼承關係稱為多繼承

#includeusing namespace std;

class a

;class b: public a

;class c: public a

;class d: public b, public c

;int main()

{ cout << "a所佔位元組的大小:" << sizeof(a) << endl;

cout << "b所佔位元組的大小:" << sizeof(b) << endl;

cout << "c所佔位元組的大小:" << sizeof(c) << endl;

cout << "d所佔位元組的大小:" << sizeof(d) << endl;

d d;

= 10; //no 存在二義性,編譯器不知道m是屬於a還是b

d.b::m = 10; //ok

d.c::m = 10; //ok

return 0;

如果乙個子類繼承了多個父類,而這些父類又有乙個共同的基類,則在對該基類中宣告的名字進行訪問時,可能產生二義性,並且在子類中進行多分拷貝,浪費儲存空間。

程式編譯結果如下:

為解決多繼承中存在的二義性問題,c++提供了虛繼承

虛繼承可以解決多種繼承的二義性及浪費儲存空間的問題,那麼b,c,d為什麼所佔的位元組大小是44,44,48呢?

虛繼承底層實現原理與編譯器相關,一般通過虛基類指標和虛基類表實現,每個虛繼承的子類都有乙個虛基類指標(占用乙個指標的儲存空間,4位元組)和虛基類表(不占用類物件的儲存空間)(需要強調的是,虛基類依舊會在子類裡面存在拷貝,只是僅僅最多存在乙份而已,並不是不在子類裡面了);當虛繼承的子類被當做父類繼承時,虛基類指標也會被繼承。

詳細可以看:

繼承的相關概念

package cn.learn.extend 定義乙個父類 public class employee public void setage int age public string getname public void setname string name public employee ...

C 類中相關概念

若條件判斷中出現了表示式 則計算表示式,結果若為0則為假,結果非0則為真。例如 for int i 10,j 1 i j 0 i j 假設a為乙個類 a a 表示宣告乙個a型別的物件。a b 宣告並定義乙個a型別物件,定義使呼叫無引數建構函式。a c 5 表示宣告乙個a型別的物件,並呼叫有引數建構函...

C 中的繼承與虛函式各種概念

c 中的繼承與虛函式各種概念 虛繼承與一般繼承 虛繼承和一般的繼承不同,一般的繼承,在目前大多數的 c 編譯器實現的物件模型中,派生類物件會直接包含基類物件的字段。而虛繼承的情況,派生類物件不會直接包含基類物件的字段,而是通過乙個間接的指標去訪問基類物件中的字段。繼承的特性 繼承是物件導向中引入的重...