MOOC C++筆記(五):繼承

第五週:繼承

繼承和派生的基本概念

繼承:在定義一個新的類B時,如果該類與某個個已有的類A相似(指的是B擁有A的全部特點),那麼就可以把A作爲一個基類,而把B作爲基類的一個派生類(也稱子類)。
派生類是通過對基類進行修改和擴充得到的。在派生類中,可以擴充新的成員變量和成員函數。
派生類一經定義後,可以獨立使用,不依賴於基類。
派生類擁有基類的全部成員函數和成員變量,不論是private、prtected、public。
注意:在派生類的各個成員函數中,不能訪問基類中的private成員。

派生類的寫法

class 派生類名: public 基類名 { };
關於繼承派生形式可以爲private和protected,詳見:C++ private和protected派生(私有和保護派生)

派生類對象的體積

等於基類對象的體積,再加上派生類對象自己的成員變量的體積。在派生類對象中,包含着基類對象,而且基類對象的存儲位置位於派生類對象新增的成員變量之前。

繼承關係和複合關係

繼承:“是”的關係。
基類A,B是基類A的派生類。
邏輯上要求:“一個B對象也是一個A對象”。
複合:“有”關係。
類C中“有”成員變量k,k是類D的對象,則C和D是複合關係
一般邏輯上要求:“D對象是C對象的固有屬性或組成部分”。

覆蓋和保護成員

覆蓋

派生類可以定義一個和基類成員同名的成員,這叫覆蓋。在派生類中訪問這類成員時,缺省的情況是訪問派生類中定義的成員。要在派生類中訪問由基類定義的同名成員時,要使用作用域符號::。
(注意儘量不要再派生類定義同名的成員變量)

類的保護成員

基類的private成員:可以被下列函數訪問
1.基類的成員函數
2.基類的友員函數
基類的public成員:可以被下列函數訪問
1.基類的成員函數
2.基類的友員函數
3.派生類的成員函數
4.派生類的友員函數
5.其他的函數
基類的protected成員:可以被下列函數訪問
1.基類的成員函數
2.基類的友員函數
3.派生類的成員函數可以訪問當前對象的基類的保護成員

派生類的構造函數

在創建派生類的對象時,需要調用基類的構造函數:初始化派生類對象中從基類繼承的成員。在執行一個派生類的構造函數之前,總是先執行基類的構造函數。
派生類的析構函數被執行時,執行完派生類的析構函數後,自動調用基類的析構函數。

封閉派生類對象的構造函數執行順序

在創建派生類的對象時
1.先執行基類的構造函數,用以初始化派生類對象從基類繼承的成員;
2.再執行成員對象類的構造函數,用以初始化派生類對象中成員對象。
消亡時析構與構造函數相反。

public繼承的複製兼容規則

1.派生類的對象可以賦值給基類對象(保留派生類中的基類內容)
2.派生類對象可以初始化基類引用
3.派生類對象的地址可以賦給基類指針(這點很重要,可以用此來實現多態)
如果派生方式是private或者protected,則上述三條不可行。

直接基類和間接基類

類A派生類B,類B派生類C,類C派生類D,。。。
類A是類B的直接基類
類B是類C的直接基類,類A是類C的間接基類
類C是類D的直接基類,類A、B是類D的間接基類
在聲明派生類時,只需要列出它的直接基類
派生類沿着類的層次自動向上繼承它的間接基類
派生類的成員包括
1.派生類自己定義的成員。
2.直接基類中的所有成員。
3.所有間接基類的全部成員。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章