父類與子類的相互轉換
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 construct2.如果是多重繼承,基類的構造順序按給定的順序,析構反之son construct
son
delete
father
delete
class輸出:father
~father()
};class
mother
~mother()
};class son : public father, public
mother
~son()
};int
main()
father construct3.利用基類的建構函式構造子類,效率更高mother construct
son construct
son
delete
mother
delete
father
delete
class輸出:father
};class son : public
father
};int
main()
father construct:1三、多重繼承son construct:
2
1.多重繼續的二義性,根本原因是
假如a有test(),則b和c都有test(),於是d產生了二義性
classa};2.編譯器通常都是從離自己最近的目錄樹向上搜尋的classb};
class c : public a, publicb;
intmain()
子類的test()覆蓋了基類的test(),並不代表基類的test()消失,只是不能直接訪問
classa};3.對於單一繼承,子類能否訪問父類的父類,只與繼承的方式有關classb};
class c : public a, publicb};
intmain()
對於多重繼承,子類不能直接訪問父類的父類。
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...