相關知識點的學習與運用:
一.繼承和派生:
1.繼承:
1-1基本結構:
class派生類名:繼承方式 ?基類名
{派生類中的新成員}
class Master :public Student{};
三種繼承方式:
公有繼承:public
私有繼承:private
保護繼承:protected
①類的繼承方式為公有繼承時,基類的公有和保護成員的訪問屬性在派生類中不變,而基類的私有成員不可訪問。
派生類可以繼承使用基類公有的和保護的,但私有的只有基類在本類中可使用,派生類無法使用!!!!
在類外部(大括號外)基類公有的可用,保護的不可用,私有的更不可用。
②當類的繼承方式為保護繼承時,基類的公有和保護成員都以保護成員身份出現(xiàn)在派生類中,而基類的私有成員不可訪問。
③當類的繼承方式為私有繼承時,基類的公有和保護成員都以私有成員身份出現(xiàn)在派生類中,而基類的私有成員不可訪問。
***②protected繼承和③private繼承得到的類都不是子類
“凡是父類對象可以出現(xiàn)的地方可以用子類對象代替”,不再適用
1-2繼承的本質(zhì):
實際上就是由上到下完全的復制;但是在對內(nèi)可見性上做了手腳,對外可見性則沒有改變。
c++提供了類的繼承機制,解決了軟件的復用問題。
自動的、滾動式的重用代碼,增強代碼,使得編程方式根本轉變,分析問題、解決問題的模式從功能模式轉向面向對象的結構模式
2.派生:
2-1派生類繼承了基類的除了構造函數(shù)、析構函數(shù)、拷貝構造函數(shù)和賦值運算符重載函數(shù)之外的所有成員,因此派生類對象由兩部分組成:一部分是由基類繼承的成員,另一部分是派生類新增加的自己特有的成員。
2-2里氏代換原則:
(LSP-Liskov Substitution Principle)
在軟件里面,把基類都替換成它的子類,程序的行為沒有變化。
2-3注意:基類指針指向派生類對象時,只能通過基類指針訪問派生類中從基類繼承來的成員,不能訪問派生類中的其它成員。說明派生類對象包含父類對象全部內(nèi)容,凡是父類對象可以出現(xiàn)的地方可以用子類對象代替,反之不可
二.繼承時的構造函數(shù)
1.基類的構造函數(shù)不被繼承,需要在派生類中自行聲明。
聲明構造函數(shù)時,只需要對本類中新增成員進行初始化,對繼承來的基類成員的初始化由基類完成。
2.單繼承時的構造函數(shù)
派生類名::派生類名(基類所需的形參,本類成員所需的形參):基類名(參數(shù)){
本類成員初始化賦值語句;};
3.父類的構造函數(shù)、析構函數(shù)拷貝構造函數(shù)、賦值運算不可以被繼承;要各司其職
***派生類構造函數(shù)執(zhí)行的一般順序是:
(1)基類構造函數(shù),
(2)派生類對象成員類的構造函數(shù)(如果有的話)。
(3)派生類構造函數(shù)體中的內(nèi)容。
釋放派生類對象時,析構函數(shù)的執(zhí)行順序是:
先執(zhí)行派生類的析構函數(shù),
再執(zhí)行對象成員類的析構函數(shù)(如果派生類有對象成員的話),
最后執(zhí)行基類的析構函數(shù),其順序與執(zhí)行構造函數(shù)時的順序正好相反.
4派生類成員的標識與訪問
同名覆蓋原則:
當派生類與基類中有相同成員時:若未強行指名,則通過派生類對象使用的是派生類中的同名成員。如要通過派生類對象訪問基類中被覆蓋的同名成員,應使用基類名限定。
5.多重繼承
class派生類名:繼承方式1基類名1,繼承方式2基類名2,...{成員聲明;}
注意:每一個“繼承方式”,只用于限制對緊隨其后之基類的繼承。
6.多繼承時的構造函數(shù)
派生類名::派生類名(基類1形參,基類2形參,...基類n形參,本類形參):基類名1(參數(shù)),基類名2(參數(shù)), ...基類名n(參數(shù)){本類成員初始化賦值語句;};