C 繼承 詳細

2021-08-08 23:06:13 字數 3278 閱讀 6533

1.繼承概念

所謂繼承,就是在已有類上派生出新類(派生類或子類),保持原有類特性的基礎上進行擴充套件,增加新功能,被繼承的類叫做基類(或父類),產生的新類叫做派生類(或子類)。

2.繼承定義格式

class 派生類名稱:繼承型別(public,protected,private)   基類(父類)名稱

舉例:

class base

public:

int _a;

protected:

int _b;

private:

int _c;

};class derived :public base

public:

int _e;

protected:

int _f;

private:

int _g;

};

3.訪問限定符

總結:(1)公有繼承實現的是乙個介面繼承,基類可用的成員派生類也可用。

(2)保護繼承和私有繼承是乙個實現繼承,基類的部分成員並非完全成為派生類介面的一部分。絕大多數場景中使用的是公有繼承。

(3)基類的私有成員在派生類中不可訪問,保護繼承可以使得基類成員能在派生類內訪問,但不能在類外訪問

。由此可見,保護成員限定符是因繼承才出現的。

(4)三種繼承方式,都允許在派生類內部訪問基類公有成員和保護成員,基類的私有成員均不允許訪問,即不可見。

(5)關鍵字class預設的繼承方式是private,關鍵字struct預設的繼承方式是public,但是建議一般情況下將繼承方式給出來。

4.派生類的預設成員函式

繼承關係中建構函式的呼叫順序:

派生類物件--->派生類建構函式列表---

>基類建構函式--->派生類建構函式

繼承關係中析構函式的呼叫順序:

析構派生類物件---

>派生類析構函式列表--->基類析構函式---

>派生類析構函式

舉個例子:

class test1

~test1()

{}};

class test2

~test2()

{}};

class base1

~base1()

{}protected:

int _data;

};class base2

~base2()

{}protected:

int _data2;

};class derive : public base1, public base2

~derive()

{}protected:

test1 t1;

test2 t2;

};

構造函式呼叫順序:

1.derive(): base1(0), base2(1),t1(3), t2(4)

派生類derive建構函式列表--->基類base1建構函式--->基類base2建構函式--->派生類derive建構函式--->t1建構函式--->派生類derive建構函式--->t2建構函式--->派生類derive建構函式

2.derive(): base2(0), base1(1),t2(3), t1(4)

3.derive(): t1(3), t2(4), base1(0), base2(1)

4.derive() : t2(3), t1(4), base2(0), base1(1)

派生類derive建構函式列表--->基類base1建構函式--->派生類derive建構函式--->基類base2建構函式--->派生類derive建構函式--->t1建構函式--->派生類derive建構函式--->t2建構函式--->派生類derive建構函式

5.繼承體系中的作用域

(1)在繼承體系中,基類和派生類是在兩個不同的作用域。

(2)派生類和基類中有相同的成員或成員函式,派生類成員將遮蔽基類對成員的訪問,即同名隱藏。一般情況下,避免基類的成員和成員函式和派生類成員和成員函式相同。

6.賦值相容規則(public繼承)

(1)子類物件可以賦值給父類物件

(2)父類物件不可以賦值給子類物件

(3)父類的指標/引用可以指向子類物件

(4)子類的指標/引用不可以指向父類物件,但可以通過強制型別轉換

7.友元函式&繼承

友元關係不可以繼承,即基類友元不能訪問子類私有成員和保護成員。

8.靜態成員&繼承

基類中有乙個靜態成員,無論派生多少個子類,靜態成員都是唯一的,不會發生改變。

9.繼承方式

(1)單繼承

(2)多繼承

(3)菱形繼承

(4)虛繼承

解決二義性問題。

C 公有繼承 私有繼承 保護繼承的詳細區別

不同的繼承方式主要體現在以下兩個方面 派生類成員對於基類的訪問許可權 類內 通過派生類物件對基類成員的訪問許可權 類外 1 需要被外界 派生類物件 訪問的成員直接設定為public 2 只能在基類類中訪問的成員設定為private 3 只能在基類和子類中訪問的成員設定為protected,prote...

C 虛繼承 虛基類 多繼承 詳細解讀

首先要說一下多繼承,虛基類和虛繼承都是在多繼承的一種情況下存在的內容。多繼承是子類繼承自多個父類的繼承方式。但是在多繼承的過程中,存在這樣一種情況,乙個基類a分別被中間基類b c繼承,然後d又繼承了b c,此時就出現了問題 如果子類d使用父類b或者父類c獨有的成員變數,這時沒有問題。但是如果d使用的...

C 物件導向之繼承 超詳細

前言 繼承是物件導向程式設計的主要特徵之一,是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的資料或新的功能,也可以用已存在的類的功能。繼承是在類之間建立一種相交關係,使得新定義的派生類 子類 的例項可以繼承已有基類 父類 的特徵和能力,而且還可以加入新的特性或者修改已有的特性建立...