![cc模塊10派生類與繼承_第1頁(yè)](http://file4.renrendoc.com/view/1b2b7d260b4bce1147cbbcc9954dd456/1b2b7d260b4bce1147cbbcc9954dd4561.gif)
![cc模塊10派生類與繼承_第2頁(yè)](http://file4.renrendoc.com/view/1b2b7d260b4bce1147cbbcc9954dd456/1b2b7d260b4bce1147cbbcc9954dd4562.gif)
![cc模塊10派生類與繼承_第3頁(yè)](http://file4.renrendoc.com/view/1b2b7d260b4bce1147cbbcc9954dd456/1b2b7d260b4bce1147cbbcc9954dd4563.gif)
![cc模塊10派生類與繼承_第4頁(yè)](http://file4.renrendoc.com/view/1b2b7d260b4bce1147cbbcc9954dd456/1b2b7d260b4bce1147cbbcc9954dd4564.gif)
![cc模塊10派生類與繼承_第5頁(yè)](http://file4.renrendoc.com/view/1b2b7d260b4bce1147cbbcc9954dd456/1b2b7d260b4bce1147cbbcc9954dd4565.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、模塊 10 派生類與繼承高級(jí)語(yǔ)言程序設(shè)計(jì)基礎(chǔ)(C&C+)2主要內(nèi)容1 繼承與派生的概念2 派生類的構(gòu)成3 派生類的繼承方式4 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)5 多繼承6 虛基類31 繼承與派生的概念保持已有類的特性而構(gòu)造新類的過(guò)程稱為繼承。在已有類的基礎(chǔ)上新增自己的特性而產(chǎn)生新類的過(guò)程稱為派生。被繼承的已有類稱為基類(或父類)。派生出的新類稱為派生類。4繼承與派生問(wèn)題舉例5繼承與派生問(wèn)題舉例6繼承與派生的目的繼承的目的:實(shí)現(xiàn)代碼重用。派生的目的:當(dāng)新的問(wèn)題出現(xiàn),原有程序無(wú)法解決(或不能完全解決)時(shí),需要對(duì)原有程序進(jìn)行改造。7 派生類生成過(guò)程三個(gè)步驟:(1)吸收基類成員:除構(gòu)造函數(shù)和析構(gòu)函數(shù)外,新類
2、將基類的公有成員全部接受。(2)改造基類成員:在新類中通過(guò)繼承方式來(lái)控制繼承來(lái)成員的訪問(wèn)權(quán)限;在新類中定義與基類中同名的數(shù)據(jù)或函數(shù),即“同名覆蓋”,實(shí)現(xiàn)以新成員取代基類的成員;(3)添加新的成員:包括數(shù)據(jù)和函數(shù)。8 2 派生類的構(gòu)成Person類char sname;int age;char sex;void display()基類數(shù)據(jù)成員成員函數(shù)Student類char sname;int age;char sex;void display()int num;int class;void display()繼承派生類新增基類和派生類的關(guān)系9基類與派生類的對(duì)應(yīng)關(guān)系單繼承派生類只從一個(gè)基類派生。
3、多繼承派生類從多個(gè)基類派生。多重派生由一個(gè)基類派生出多個(gè)不同的派生類。多層派生派生類又作為基類,繼續(xù)派生新的類。103 派生類的繼承方式不同繼承方式的影響主要體現(xiàn)在:派生類成員對(duì)基類成員的訪問(wèn)權(quán)限通過(guò)派生類對(duì)象對(duì)基類成員的訪問(wèn)權(quán)限三種繼承方式公有繼承 public私有繼承 private保護(hù)繼承 protected11必須在類聲明的頭部指明它的基類以及繼承方式(基類成員的訪問(wèn)屬性),如public、private或者protected;繼承方式必須且只能選擇一個(gè),缺省默認(rèn)為private;派生類的聲明方式12class : ;例: class A/ A類的成員 ;class B: public
4、 A / B類的成員 ;單繼承定義格式13基類的成員可以有public(公有)、protected(保護(hù))和private(私有)三種訪問(wèn)屬性;基類的自身成員可以訪問(wèn)基類中任何其它成員,但是基類的對(duì)象只能訪問(wèn)基類的公有成員;3 派生類的繼承方式14在派生類中,從基類繼承來(lái)的成員,其訪問(wèn)屬性由繼承方式控制;不同的繼承方式使得具有不同訪問(wèn)屬性的基類成員在派生類中的訪問(wèn)屬性也不同:包括派生類的新增成員對(duì)繼承來(lái)的基類成員的訪問(wèn),以及派生類外部,通過(guò)派生類對(duì)象對(duì)繼承來(lái)的基類成員的訪問(wèn)。3 派生類的繼承方式15公有繼承(public)基類的public和protected成員的訪問(wèn)屬性在派生類中保持不變,
5、但基類的private成員不可直接訪問(wèn)。派生類中的成員函數(shù)可以直接訪問(wèn)基類中的public和protected成員,但不能直接訪問(wèn)基類的private成員。通過(guò)派生類的對(duì)象只能訪問(wèn)基類的public成員。例1 從point類公有派生出circle類。16私有繼承(private)基類的public和protected成員都以private身份出現(xiàn)在派生類中,但基類的private成員不可直接訪問(wèn)。派生類中的成員函數(shù)可以直接訪問(wèn)基類中的public和protected成員,但不能直接訪問(wèn)基類的private成員。通過(guò)派生類的對(duì)象不能直接訪問(wèn)基類中的任何成員。例2 將例1中的公有繼承改成私有繼承。
6、17保護(hù)繼承(protected)基類的public和protected成員都以protected身份出現(xiàn)在派生類中,但基類的private成員不可直接訪問(wèn)。派生類中的成員函數(shù)可以直接訪問(wèn)基類中的public和protected成員,但不能直接訪問(wèn)基類的private成員。通過(guò)派生類的對(duì)象不能直接訪問(wèn)基類中的任何成員。18關(guān)于訪問(wèn)屬性:繼承方式基類成員在派生類中的訪問(wèn)屬性派生類中的成員函數(shù)派生類的對(duì)象公有繼承public protected privatepublic protected不可直接訪問(wèn)可訪問(wèn)基類中的公有成員和保護(hù)成員可訪問(wèn)基類和派生類中的公有成員私有繼承public protec
7、ted privateprivate private不可直接訪問(wèn)可訪問(wèn)基類中的公有成員和保護(hù)成員不能訪問(wèn)基類中的所有成員保護(hù)繼承publicprotected privateprotected protected不可直接訪問(wèn)可訪問(wèn)基類中的公有成員和保護(hù)成員不能訪問(wèn)基類中的所有成員194 派生類的構(gòu)造、析構(gòu)函數(shù) 派生類的構(gòu)造函數(shù)基類的構(gòu)造函數(shù)不被繼承,派生類中需要聲明自己的構(gòu)造函數(shù)。聲明構(gòu)造函數(shù)時(shí),只需要對(duì)本類中新增成員進(jìn)行初始化,對(duì)繼承來(lái)的基類成員的初始化,自動(dòng)調(diào)用基類構(gòu)造函數(shù)完成。派生類的構(gòu)造函數(shù)需要給基類的構(gòu)造函數(shù)傳遞參數(shù)20 派生類的構(gòu)造函數(shù)在兩種情況下,必須定義派生類的構(gòu)造函數(shù):派生類
8、本身需要構(gòu)造函數(shù);在定義派生類對(duì)象時(shí),其相應(yīng)的基類對(duì)象需調(diào)用帶有參數(shù)的構(gòu)造函數(shù)。21簡(jiǎn)單的派生類只有一個(gè)基類,只有一級(jí)派生,且派生類的數(shù)據(jù)成員不包含其它類的對(duì)象;建立一個(gè)派生類對(duì)象時(shí),構(gòu)造函數(shù)的執(zhí)行順序是:(1) 調(diào)用基類的構(gòu)造函數(shù);(2) 執(zhí)行派生類的構(gòu)造函數(shù)體中的內(nèi)容。簡(jiǎn)單派生類的構(gòu)造函數(shù)22簡(jiǎn)單派生類的構(gòu)造函數(shù)派生類名:派生類名(基類所需的形參,本類成員所需的形參):基類名(參數(shù)表) 本類成員初始化賦值語(yǔ)句;例3 簡(jiǎn)單派生類的構(gòu)造函數(shù)。23如果一個(gè)類的數(shù)據(jù)成員包含其它類的對(duì)象,則該對(duì)象就稱為內(nèi)嵌對(duì)象成員;內(nèi)嵌對(duì)象成員的初始化, 是在建立派生類對(duì)象時(shí)通過(guò)調(diào)用派生類的構(gòu)造函數(shù)實(shí)現(xiàn);有內(nèi)嵌對(duì)象
9、成員的派生類的構(gòu)造函數(shù)的語(yǔ)法形式: 派生類名:派生類名(總參數(shù)表):基類名(參數(shù)表), 子對(duì)象名(參數(shù)表) / 派生類中新增成員的初始化; 有內(nèi)嵌對(duì)象成員時(shí)派生類的構(gòu)造函數(shù)24參數(shù)總表:包括初始化基類數(shù)據(jù)、新增對(duì)象數(shù)據(jù)及新增一般成員所需的全部數(shù)據(jù)。建立派生類對(duì)象時(shí),構(gòu)造函數(shù)的執(zhí)行順序是:(1) 調(diào)用基類的構(gòu)造函數(shù);(2) 調(diào)用子對(duì)象的構(gòu)造函數(shù);(3) 執(zhí)行派生類的構(gòu)造函數(shù)體中的內(nèi)容。例4 包含子對(duì)象的派生類的構(gòu)造函數(shù)。有內(nèi)嵌對(duì)象成員時(shí)派生類的構(gòu)造函數(shù)25派生類構(gòu)造函數(shù)的特殊形式(1) 派生類的構(gòu)造函數(shù)可以是空函數(shù);(2) 若在基類中沒(méi)定義構(gòu)造函數(shù)或定義了無(wú)參構(gòu)造函數(shù),則派生類構(gòu)造函數(shù)的定義就不
10、寫基類的構(gòu)造函數(shù)。26派生類的析構(gòu)函數(shù)在派生類中是否要定義析構(gòu)函數(shù)與它所屬的基類無(wú)關(guān);派生類析構(gòu)函數(shù)的定義與無(wú)繼承關(guān)系的類的析構(gòu)函數(shù)定義相同;系統(tǒng)會(huì)自動(dòng)調(diào)用基類及對(duì)象成員的析構(gòu)函數(shù)來(lái)對(duì)基類和對(duì)象成員進(jìn)行清理,但執(zhí)行次序和構(gòu)造函數(shù)正好相反(先派生類,再基類對(duì)象,后基類)。例5 給出下列程序的輸出結(jié)果。275 多繼承一個(gè)派生類由多個(gè)基類派生而來(lái),這種情況稱為多繼承。base1base2base3derive1derive2derive3derive428聲明多繼承的方法定義多繼承派生類時(shí),要指出它的所有基類名及繼承方式;聲明形式: class 派生類名:繼承方式1 基類名1,繼承方式2 基類名2,
11、 繼承方式n 基類名n 派生類新增成員; 多繼承中,公有派生和私有派生對(duì)于基類成員在派生類中的可訪問(wèn)性與單繼承的規(guī)則相同。29多繼承派生類的構(gòu)造函數(shù)多繼承派生類的構(gòu)造函數(shù)定義與單繼承相似,但幾個(gè)基類的構(gòu)造函數(shù)之間用“,”分隔。形式如下:派生類名:派生類名(參數(shù)總表):基類1(參數(shù)表1),基類n(參數(shù)表n),對(duì)象成員1(參數(shù)表1),對(duì)象成員n(參數(shù)表n) /派生類新增成員的初始化語(yǔ)句; 30多繼承派生類的構(gòu)造函數(shù)派生類構(gòu)造函數(shù)要完成新增構(gòu)造函數(shù)的調(diào)用以及所有基類構(gòu)造函數(shù)的調(diào)用;參數(shù)總表包含其后的各個(gè)分參數(shù)表,即構(gòu)造函數(shù)的參數(shù)必須包含完成所有基類初始化以及內(nèi)嵌對(duì)象初始化所需要所有參數(shù),即參數(shù)總是分
12、配給后面的參數(shù)表1、參數(shù)表2,。31 多繼承構(gòu)造函數(shù)的執(zhí)行順序 先祖先(基類),調(diào)用基類構(gòu)造函數(shù),調(diào)用順序按照它們被繼承時(shí)說(shuō)明的順序(從左向右); 再客人(內(nèi)嵌對(duì)象成員),調(diào)用內(nèi)嵌對(duì)象的構(gòu)造函數(shù),調(diào)用順序按照它們?cè)陬愔姓f(shuō)明的順序; 后自己(派生類),執(zhí)行派生類構(gòu)造函數(shù)體中的內(nèi)容 。32例6 多繼承構(gòu)造函數(shù)舉例#include class B1/基類B1,構(gòu)造函數(shù)有參數(shù)public:B1(int i) coutconstructing B1 iendl;class B2/基類B2,構(gòu)造函數(shù)有參數(shù)public:B2(int j) coutconstructing B2 jendl;class B3
13、/基類B3,構(gòu)造函數(shù)無(wú)參數(shù)public:B3()coutconstructing B3 *endl;class C: public B2, public B1, public B3 public:/派生類的公有成員C(int a, int b, int c, int d): B1(a),memberB2(d),memberB1(c),B2(b) private:/派生類的私有對(duì)象成員B1 memberB1;B2 memberB2;B3 memberB3;void main()C obj(1,2,3,4); 運(yùn)行結(jié)果:constructing B2 2constructing B1 1const
14、ructing B3 *constructing B1 3constructing B2 4constructing B3 *3334C(int a,int b,int c,int d):B1(a),memberB2(d),memberB1(c),B2(b) 構(gòu)造函數(shù)的參數(shù)表中給出了基類及內(nèi)嵌成員對(duì)象所需的全部參數(shù);在冒號(hào)之后調(diào)用各個(gè)基類及內(nèi)嵌對(duì)象的構(gòu)造函數(shù);基類構(gòu)造函數(shù)的執(zhí)行順序按照它們?cè)谂缮愔新暶骼^承的順序(B2,B1,B3 );內(nèi)嵌對(duì)象構(gòu)造函數(shù)的執(zhí)行順序也按照其在派生類中聲明的順序( B1,B2,B3 ) 。例6 多繼承構(gòu)造函數(shù)舉例35需要注意:1、在類C的構(gòu)造函數(shù)中,沒(méi)有列出全部基類
15、和內(nèi)嵌成員對(duì)象,因B3類只有默認(rèn)構(gòu)造函數(shù),不需傳遞參數(shù),故基類B3以及B3類成員對(duì)象memberB3不必列出;2、在類C的構(gòu)造函數(shù)中,基類名和成員對(duì)象名的順序可隨意。派生類構(gòu)造函數(shù)體為空,實(shí)際上它只起到傳遞參數(shù)和調(diào)用基類和內(nèi)嵌對(duì)象構(gòu)造函數(shù)的作用。例6 多繼承構(gòu)造函數(shù)舉例36多繼承的析構(gòu)函數(shù)析構(gòu)函數(shù)也不被繼承,派生類自行聲明聲明方法與一般(無(wú)繼承關(guān)系時(shí))類的析構(gòu)函數(shù)相同。不需要顯式地調(diào)用基類的析構(gòu)函數(shù),系統(tǒng)會(huì)自動(dòng)隱式調(diào)用。析構(gòu)函數(shù)的調(diào)用次序與構(gòu)造函數(shù)相反。例7 多繼承派生類的構(gòu)造函數(shù)與析構(gòu)函數(shù)。37例7 派生類析構(gòu)函數(shù)舉例#include class B1/基類B1聲明 public:B1(in
16、t i) coutconstructing B1 iendl;B1() coutdestructing B1 endl;class B2/基類B2聲明public:B2(int j) coutconstructing B2 jendl;B2() coutdestructing B2 endl;class B3/基類B3聲明public:B3()coutconstructing B3 *endl;B3() coutdestructing B3 endl;class C: public B2, public B1, public B3public:C(int a, int b, int c, in
17、t d): B1(a),memberB2(d),memberB1(c),B2(b)private:B1 memberB1;B2 memberB2;B3 memberB3;void main()C obj(1,2,3,4); 3839運(yùn)行結(jié)果constructing B2 2constructing B1 1constructing B3 *constructing B1 3constructing B2 4constructing B3 *destructing B3destructing B2destructing B1destructing B3destructing B1destruct
18、ing B240同名隱藏規(guī)則當(dāng)派生類與基類中有相同成員時(shí):若未強(qiáng)行指名,則通過(guò)派生類對(duì)象使用的是派生類中的同名成員。如要通過(guò)派生類對(duì)象訪問(wèn)基類中被覆蓋的同名成員,應(yīng)使用基類名限定。41例8 多重繼承同名隱藏舉例#include class B1/聲明基類B1 public:/外部接口int nV;void fun() coutMember of B1endl;class B2/聲明基類B2 public:/外部接口int nV;void fun()coutMember of B2endl;class D1: public B1, public B2 public:int nV;/同名數(shù)據(jù)成員v
19、oid fun()cout“Member of D1”endl; 同名函數(shù)成員;void main()D1 d1;d1.nV=1; /對(duì)象名.成員名標(biāo)識(shí), 訪問(wèn)D1類成員d1.fun(); d1.B1:nV=2;/作用域分辨符標(biāo)識(shí), 訪問(wèn)基類B1成員d1.B1:fun();d1.B2:nV=3;/作用域分辨符標(biāo)識(shí), 訪問(wèn)基類B2成員d1.B2:fun();4243二義性問(wèn)題在多繼承時(shí),基類與派生類之間,或基類之間出現(xiàn)同名成員時(shí),將出現(xiàn)訪問(wèn)時(shí)的二義性(不確定性)采用虛函數(shù)或同名隱藏規(guī)則來(lái)解決。當(dāng)派生類由多個(gè)基類派生,而這些基類又從同一個(gè)基類派生,則在訪問(wèn)此共同基類中的成員時(shí),將產(chǎn)生二義性采用虛基
20、類來(lái)解決。44二義性問(wèn)題舉例(一)class A public: void f();class B public: void f(); void g();class C: public A, piblic B public: void g(); void h();如果聲明:C c1;則 c1.f(); 具有二義性而 c1.g(); 無(wú)二義性(同名覆蓋)45二義性的解決方法解決方法一:用類名來(lái)限定c1.A:f() 或 c1.B:f()解決方法二:同名覆蓋在C 中聲明一個(gè)同名成員函數(shù)f(),f()再根據(jù)需要調(diào)用 A:f() 或 B:f()46二義性問(wèn)題舉例(二)class B public: int b;class B1 : public B private: int b1;class B2 : public B private: int b2;class C : public B1,public B2 public: int f(); private: int d;派生類C的對(duì)象的存儲(chǔ)結(jié)構(gòu)示意圖:bb1bb2dB類成員B類成員B1類成員B2類成員C類對(duì)象有二義性:C c;c.bc.B:b無(wú)二義性:c.B1:bc.B2:b47486 虛基類虛基類的引入用于有共同基類的場(chǎng)合聲明以virtual修飾說(shuō)明基類例:class B1:virtual
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇教版一年級(jí)數(shù)學(xué)下冊(cè)期末復(fù)習(xí)口算練習(xí)題一
- 八年級(jí)數(shù)學(xué)下冊(cè)22.3特殊的平行四邊形5矩形和菱形聽(tīng)評(píng)課記錄滬教版五四制
- 五年級(jí)德育工作計(jì)劃
- 蘇教版二年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)口算練習(xí)題
- 企業(yè)人力資源管理咨詢項(xiàng)目合同范本
- 車棚搭建協(xié)議書范本
- 簽訂銷售合同范本
- 新建房屋租賃合同范本
- 2025年度餐飲商鋪品牌推廣租賃合同
- 二零二五年度離婚協(xié)議書凈身出戶模板:婚姻終結(jié)財(cái)產(chǎn)分割規(guī)范
- 二零二五年度集團(tuán)公司內(nèi)部項(xiàng)目專項(xiàng)借款合同范本3篇
- 事業(yè)單位公開(kāi)招聘工作人員考試題(公共基礎(chǔ)知識(shí)試題和答案)
- 低空飛行旅游觀光項(xiàng)目可行性實(shí)施報(bào)告
- 2024年版:煤礦用壓力罐設(shè)計(jì)與安裝合同
- 甲狀腺的科普宣教
- 《算法定價(jià)壟斷屬性問(wèn)題研究的國(guó)內(nèi)外文獻(xiàn)綜述》4200字
- 2024年04月浙江義烏農(nóng)商銀行春季招考筆試歷年參考題庫(kù)附帶答案詳解
- 涉密計(jì)算機(jī)保密培訓(xùn)
- 2024年浙江省五校聯(lián)盟高考地理聯(lián)考試卷(3月份)
- 在線心理健康咨詢行業(yè)現(xiàn)狀分析及未來(lái)三至五年行業(yè)發(fā)展報(bào)告
- 電動(dòng)三輪車購(gòu)銷合同
評(píng)論
0/150
提交評(píng)論