c 父類與子類間的繼承關係

2022-03-13 04:17:56 字數 2299 閱讀 1410

父類與子類的相互轉換

1、派生類的物件可以賦給基類,反之不行

2、基類的指標可以指向派生類,反之不行

3、基類的引用可以初始化為派生類的物件,反之不行

4、派生類指標必須強制轉換為基類指標後才可以指向基類

5、基類指標轉換為派生類指標容易導致崩潰性錯誤

6、虛基類的引用或派生不能轉換為派生類

class

father;

class son : public

father;

intmain()

公有成員

保護成員

私有成員

公有繼承

公有保護

不可訪問

保護繼承

保護保護

不可訪問

私有繼承

私有私有

不可訪問

成員函式11

1物件10

0子類11

01:可以訪問 0:不可訪問

當所有成員都變成不可訪問時,再往下派生就沒有意義了。

二、子類的構造與析構

1、構造派生類物件時,先執行基類的建構函式,再執行子類的建構函式,析構反之

class

father

~father()

};class son : public

father

~son()

};int

main()

輸出:

father construct

son construct

son

delete

father

delete

2.如果是多重繼承,基類的構造順序按給定的順序,析構反之

class

father

~father()

};class

mother

~mother()

};class son : public father, public

mother

~son()

};int

main()

輸出:

father construct

mother construct

son construct

son

delete

mother

delete

father

delete

3.利用基類的建構函式構造子類,效率更高

class

father

};class son : public

father

};int

main()

輸出:

father construct:1

son construct:

2

三、多重繼承

1.多重繼續的二義性,根本原因是

假如a有test(),則b和c都有test(),於是d產生了二義性

classa};

classb};

class c : public a, publicb;

intmain()

2.編譯器通常都是從離自己最近的目錄樹向上搜尋的

子類的test()覆蓋了基類的test(),並不代表基類的test()消失,只是不能直接訪問

classa};

classb};

class c : public a, publicb};

intmain()

3.對於單一繼承,子類能否訪問父類的父類,只與繼承的方式有關

對於多重繼承,子類不能直接訪問父類的父類。

4.用virtual來避免二義性。

class b : virtual public a.

四、繼承與包含

1.乙個類的成員變數列表中包含另乙個類的物件,叫做包含(包容)。

2.包含與私有繼承的區別:

包含:1)使程式看上去更清晰易懂

2)不存在繼承帶來的問題

3)可以包括另乙個類的多個物件

私有繼承:

1)可以訪問基類的保護成員

2)可以重定義虛函式,實現多型

c 的繼承與虛方法,子類父類間關係

父類子類 1.子 右 從父 左 來,父 左 看不到子 右 class base1 class base2 base1 static void main string args 輸出結果為 base1 method12.正常的子類 class program class base2 base1 sta...

C 中父類與子類的繼承關係

c 中的父類與子類的繼承關係與c和c 中的類似,這裡先闡述最重要的一點 假如子類繼承了父類,那麼子類可以強制轉換為父類,並且保證編譯和執行都不出錯 但是父類強制轉換成子類的時候,編譯可以通過執行通不過。請看如下 using system using system.collections.generi...

C 中父類與子類的繼承關係

c 中的父類與子類的繼承關係與c和c 中的類似,這裡先闡述最重要的一點 假如子類繼承了父類,那麼子類可以強制轉換為父類,並且保證編譯和執行都不出錯 但是父類強制轉換成子類的時候,編譯可以通過執行通不過。請看如下 using system using system.collections.generi...