




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1第六講第六講 繼承與派生繼承與派生 主講人:生主講人:生 龍龍Email: long_2內容提要內容提要 繼承與派生繼承與派生 基本概念基本概念 派生類的聲明派生類的聲明 派生類的構成派生類的構成 派生類成員的訪問屬性派生類成員的訪問屬性 派生類的構造和析構派生類的構造和析構 多重繼承多重繼承 基類與派生類的轉換基類與派生類的轉換 繼承與組合繼承與組合 課堂練習課堂練習 作業(yè)作業(yè)3繼承與派生繼承與派生 基本概念基本概念一個新類從已有的類那里獲得其已有特性,這種一個新類從已有的類那里獲得其已有特性,這種現(xiàn)象現(xiàn)象稱稱為為類的繼承。類的繼承。從已有的類(父類從已有的類(父類/基類)產生一個新的子類
2、(派生類),基類)產生一個新的子類(派生類),稱為稱為類的派生類的派生。目的:目的:利用原來定義的類作為基礎,再加上新的內容定義利用原來定義的類作為基礎,再加上新的內容定義新的類,以減少重復的工作量。新的類,以減少重復的工作量。說明:說明: 一個基類可以派生出多個子類,每一個子類又可作為一個基類可以派生出多個子類,每一個子類又可作為基類派生出新的子類;基類派生出新的子類; 一個子類不僅可以從一個基類派生,也可以從多個基一個子類不僅可以從一個基類派生,也可以從多個基類派生。(馬類派生。(馬+驢驢=騾子)騾子)4繼承與派生繼承與派生類類A派生類派生類B:類:類A為基類,類為基類,類B為派生類為派生
3、類AB新增加的成員數新增加的成員數據和成員函數據和成員函數派生類是基類的具體化,基類是派生類的抽象派生類是基類的具體化,基類是派生類的抽象。5繼承與派生繼承與派生class Student int num; char name30; char sex; public: void display( ) coutnum: numendl; coutname: nameendl; coutsex: sexendl; ;示例:示例:6繼承與派生繼承與派生class Student1 int num; /此行原來己有此行原來己有 char name20; /此行原來己有此行原來己有 char sex;
4、/此行原來己有此行原來己有 int age; char addr20; public: void display( ) ; /此行原來己有此行原來己有 coutnum: numendl; /此行原來己有此行原來己有 coutname: nameendl;/此行原來己有此行原來己有 coutsex: sexendl; /此行原來己有此行原來己有 coutage: ageendl; coutaddress: addrendl; ; 7繼承與派生繼承與派生 派生類的聲明派生類的聲明class Student1: public Student/聲明基類是聲明基類是Studentprivate: int
5、 age; /新增加的數據成員新增加的數據成員 string addr; /新增加的數據成員新增加的數據成員public: void display_1( ) /新增加的成員函數新增加的成員函數 coutage: ageendl; coutaddress: addrendl; ;8繼承與派生繼承與派生聲明派生類的一般形式:聲明派生類的一般形式: class 派生類名:派生類名:繼承方式繼承方式 基類名基類名1, 繼承方式繼承方式 基類名基類名22 派生類新增加的成員派生類新增加的成員 ;說明:說明: 派生類名是用戶自定義的合法標識符派生類名是用戶自定義的合法標識符 ; 派生類名后用冒號派生類名
6、后用冒號“:”來實現(xiàn)對基類的繼承;來實現(xiàn)對基類的繼承; 繼承方式有:繼承方式有:public, protected, private; 繼承方式可以省略,默認為繼承方式可以省略,默認為private; 派生類中可以重新定義基類中已有的成員函數;派生類中可以重新定義基類中已有的成員函數; 派生類中可以改變基類中已有成員的訪問屬性;派生類中可以改變基類中已有成員的訪問屬性;9繼承與派生繼承與派生 派生類的構成派生類的構成AB新增加的數據成新增加的數據成員和成員函數員和成員函數繼承的數據成員繼承的數據成員和成員函數和成員函數 構造一個基類包括構造一個基類包括3 3方面內容:方面內容:從基類接收成員、
7、從基類接收成員、調整從基類接收的成員、增加新的成員調整從基類接收的成員、增加新的成員。10繼承與派生繼承與派生1 1、從基類接收成員:派生類必須把基類全部的成員、從基類接收成員:派生類必須把基類全部的成員(不包括構造函數和析構函數)都接收進來。(不包括構造函數和析構函數)都接收進來。產生的問題產生的問題數據冗余數據冗余2 2、調整從基類接收的成員:可以用新成員取代基類、調整從基類接收的成員:可以用新成員取代基類的成員的成員例如:數據成員的訪問屬性,成員函數例如:數據成員的訪問屬性,成員函數指訪問屬性和函數定義。指訪問屬性和函數定義。成員的名稱必須相同,且成員函數的參數必須相同成員的名稱必須相同
8、,且成員函數的參數必須相同(數量和類型)。(數量和類型)。3 3、增加新的成員。、增加新的成員。11繼承與派生繼承與派生 派生類成員的訪問屬性派生類成員的訪問屬性需要考慮的情況有:需要考慮的情況有: 基類的成員函數訪問基類的成員;基類的成員函數訪問基類的成員; 派生類的成員函數訪問派生類自己增加的成員;派生類的成員函數訪問派生類自己增加的成員; 基類的成員函數訪問派生類的成員;基類的成員函數訪問派生類的成員; 派生類的成員函數訪問基類的成員;派生類的成員函數訪問基類的成員; 在派生類外訪問派生類的成員;在派生類外訪問派生類的成員; 在派生類外訪問基類的成員。在派生類外訪問基類的成員。派生類中新
9、增加的成員函數是否可以訪問基類中的私有成員?派生類中新增加的成員函數是否可以訪問基類中的私有成員?在派生類外,能否通過派生類的對象名訪問從基類繼承的公用成在派生類外,能否通過派生類的對象名訪問從基類繼承的公用成員?員?12繼承與派生繼承與派生不同的繼承方式決定了基類成員在派生類中的訪問屬性。不同的繼承方式決定了基類成員在派生類中的訪問屬性。 公用繼承:基類的公用成員和保護成員在派生類中保持公用繼承:基類的公用成員和保護成員在派生類中保持原有的訪問屬性,其私有成員仍為基類私有;原有的訪問屬性,其私有成員仍為基類私有; 私有繼承:基類的公用成員和保護成員在派生類中成為私有繼承:基類的公用成員和保護
10、成員在派生類中成為私有成員,其私有成員仍為基類私有;私有成員,其私有成員仍為基類私有; 保護繼承:基類的公用成員和保護成員在派生類中成為保護繼承:基類的公用成員和保護成員在派生類中成為保護成員,其私有成員仍為基類私有。保護成員,其私有成員仍為基類私有。保護成員的意思是:不能被外界引用,但可以被派生類的保護成員的意思是:不能被外界引用,但可以被派生類的成員引用。成員引用。13繼承與派生繼承與派生1、公用繼承、公用繼承公用繼承公用繼承:基類的公用成員和保護成員在派生類中保持原有:基類的公用成員和保護成員在派生類中保持原有 的訪問屬性,其私有成員仍為基類私有。的訪問屬性,其私有成員仍為基類私有。 用
11、公用繼承方式建立的派生類稱為公用派生類,其基用公用繼承方式建立的派生類稱為公用派生類,其基類稱為公用基類。類稱為公用基類。公用基類在派生類中的訪問屬性公用基類在派生類中的訪問屬性公用基類的成員公用基類的成員在公用派生類中的訪問屬性在公用派生類中的訪問屬性私有成員私有成員不可訪問不可訪問公用成員公用成員公用公用保護成員保護成員保護保護14繼承與派生繼承與派生例例 5.115繼承與派生繼承與派生16繼承與派生繼承與派生17繼承與派生繼承與派生2、私有繼承、私有繼承私有繼承私有繼承:基類的公用成員和保護成員在派生類中成為私:基類的公用成員和保護成員在派生類中成為私 有成員,其私有成員仍為基類私有。有
12、成員,其私有成員仍為基類私有。 用私有繼承方式建立的派生類稱為私有派生類,其基用私有繼承方式建立的派生類稱為私有派生類,其基類稱為私有基類。類稱為私有基類。私有基類在派生類中的訪問屬性私有基類在派生類中的訪問屬性私有基類的成員私有基類的成員在私有派生類中的訪問屬性在私有派生類中的訪問屬性私有成員私有成員不可訪問不可訪問公用成員公用成員私有私有保護成員保護成員私有私有18繼承與派生繼承與派生例例 5.2 將例將例5.1中的公用繼承改為私有繼承中的公用繼承改為私有繼承19繼承與派生繼承與派生思考:私有繼承時,派生類對象如何調用基類的私有思考:私有繼承時,派生類對象如何調用基類的私有數據成員?數據成
13、員?20繼承與派生繼承與派生說明:說明: 私有繼承方式,不能通過派生類對象引用從私有基類私有繼承方式,不能通過派生類對象引用從私有基類繼承過來的任何成員(包括數據成員和成員函數);繼承過來的任何成員(包括數據成員和成員函數); 派生類的成員函數可以訪問私有基類的公用成員。派生類的成員函數可以訪問私有基類的公用成員。21繼承與派生繼承與派生3、保護成員和保護繼承、保護成員和保護繼承保護繼承保護繼承:基類的公用成員和保護成員在派生類中成為保護:基類的公用成員和保護成員在派生類中成為保護成員,其私有成員仍為基類私有。成員,其私有成員仍為基類私有。 用保護繼承方式建立的派生類稱為保護派生類,其基用保護
14、繼承方式建立的派生類稱為保護派生類,其基類稱為保護基類。類稱為保護基類。 保護成員可以被派生類的成員函數引用。保護成員可以被派生類的成員函數引用。保護基類在派生類中的訪問屬性保護基類在派生類中的訪問屬性保護基類的成員保護基類的成員在保護派生類中的訪問屬性在保護派生類中的訪問屬性私有成員私有成員不可訪問不可訪問公用成員公用成員保護保護保護成員保護成員保護保護22課堂練習課堂練習1. 分析訪問屬性分析訪問屬性23課堂練習課堂練習 在在main函數中能否用函數中能否用b1.i,b1.j和和b1.k引用派生類引用派生類B對象對象b1中基類中基類A的成員?的成員? 派生類派生類B中的成員函數能否調用基類
15、中的成員函數能否調用基類A中的成員中的成員f1和和f2? 派生類派生類B中的成員函數能否引用基類中的成員函數能否引用基類A中的數據成員中的數據成員i, j, k? 能否在能否在main函數中用函數中用c1.i,c1.j,c1.k,c1.m,c1.n,c1.p引用基引用基類類A的成員的成員i,j,k,派生類,派生類B的成員的成員m,n,以及派生類,以及派生類C的的成員成員p? 能否在能否在main中用中用c1.f1(),c1.f2(),c1.f3()和和c1.f4()調用調用f1,f2,f3,f4成員函數?成員函數? 派生類派生類C的成員函數的成員函數f4能否調用基類能否調用基類A中的成員函數中
16、的成員函數f1,f2和派生類中的成員函數和派生類中的成員函數f3?24繼承與派生繼承與派生4、多級派生時的訪問屬性、多級派生時的訪問屬性多級派生情況下,各成員的訪問屬性仍按以上原則確定。多級派生情況下,各成員的訪問屬性仍按以上原則確定。類類A類類B類類C派生派生派生派生25繼承與派生繼承與派生 派生類的構造函數和析構函數派生類的構造函數和析構函數一般定義格式(類體中):一般定義格式(類體中):派生類構造函數名(總參數列表)派生類構造函數名(總參數列表): :基類構造函數名(參數列表)基類構造函數名(參數列表) 派生類中新增數據成員初始化語句派生類中新增數據成員初始化語句 例:例:Student
17、1(int n,string nam,char s,int a,string ad):Student(n,nam,s)age=a;addr=ad;注意!這里是調用基類中的注意!這里是調用基類中的構造函數,構造函數,n,nam,sn,nam,s是實參。是實參。26繼承與派生繼承與派生建立對象時:建立對象時: 派生類構造函數先調用基類構造函數;派生類構造函數先調用基類構造函數; 再執(zhí)行派生類構造函數本身。再執(zhí)行派生類構造函數本身。釋放對象時:釋放對象時: 先執(zhí)行派生類的析構函數;先執(zhí)行派生類的析構函數; 再執(zhí)行其基類的析構函數。再執(zhí)行其基類的析構函數。27課堂練習課堂練習2. 讀程序寫結果讀程序寫
18、結果28課堂練習課堂練習29繼承與派生繼承與派生自學內容:自學內容: 有有子對象(對象作為數據成員)子對象(對象作為數據成員)的派生類的構造函數;的派生類的構造函數; 多級派生時的構造函數;多級派生時的構造函數; 派生類構造函數的特殊形式;派生類構造函數的特殊形式; 派生類的析構函數。派生類的析構函數。30繼承與派生繼承與派生 多重繼承多重繼承一個派生類有兩個或多個基類一個派生類有兩個或多個基類1、聲明格式:聲明格式: class D:public A, private B, protected C 類類D新增加的成員新增加的成員;2、多重繼承派生類的構造函數:多重繼承派生類的構造函數: 派生
19、類構造函數名(總參數列表):基類派生類構造函數名(總參數列表):基類1構造函構造函數(參數列表),基類數(參數列表),基類2構造函數(參數列表),基類構造函數(參數列表),基類3構造函數(參數列表)構造函數(參數列表) 派生類中新增數據成員初始化語句派生類中新增數據成員初始化語句31繼承與派生繼承與派生3、多重繼承引起的二義性問題(繼承的成員同名):多重繼承引起的二義性問題(繼承的成員同名):1 1)兩個基類有同名成員)兩個基類有同名成員應改為:應改為:32繼承與派生繼承與派生2 2)兩個基類和派生類三者都有同名成員)兩個基類和派生類三者都有同名成員此時訪問的是派生類此時訪問的是派生類C C中
20、的成員,中的成員,因為基類的同名成員在派生類中因為基類的同名成員在派生類中被屏蔽。被屏蔽。33繼承與派生繼承與派生3 3)如果基類)如果基類A和基類和基類B是從同一個基類是從同一個基類N派生的派生的應改為:應改為:34繼承與派生繼承與派生4 4)虛基類)虛基類使得在繼承間接共同基類時只保留一份成員使得在繼承間接共同基類時只保留一份成員聲明格式:聲明格式: class 派生類名派生類名: virtual 繼承方式名繼承方式名 基類名基類名 派生類類體派生類類體;注意:虛基類并不是在聲明基類時聲明的,而是在聲明派生注意:虛基類并不是在聲明基類時聲明的,而是在聲明派生類時,指定繼承方式時聲明的。類時
21、,指定繼承方式時聲明的。類類A類類B類類C類類D35繼承與派生繼承與派生虛基類的初始化:虛基類的初始化: 例例:注意:在最后派生類中要負責對直接基類和注意:在最后派生類中要負責對直接基類和虛基類虛基類的初始化,的初始化,且且C+C+編譯系統(tǒng)只執(zhí)行最后的派生類對虛基類的構造函數的編譯系統(tǒng)只執(zhí)行最后的派生類對虛基類的構造函數的調用,忽略虛基類的其他派生類。調用,忽略虛基類的其他派生類。36繼承與派生繼承與派生 基類與派生類的轉換基類與派生類的轉換 基類對象與派生類對象之間存在賦值兼容關系基類對象與派生類對象之間存在賦值兼容關系1、派生類對象可向其基類對象賦值、派生類對象可向其基類對象賦值 例:例:
22、 A a1; /定義基類定義基類A對象對象a1 B b1;/定義類定義類A的公用派生類的公用派生類B的對象的對象b1 a1=b1;/用派生類對象用派生類對象b1對基類對象對基類對象a1賦值賦值 賦值時舍棄派生類自己的成員;賦值時舍棄派生類自己的成員; 只能用派生類對象對其基類對象賦值;只能用派生類對象對其基類對象賦值; 同一基類的不同派生類對象之間不能賦值。同一基類的不同派生類對象之間不能賦值。37繼承與派生繼承與派生2、派生類對象可替代基類對象向基類對象的引用進行賦、派生類對象可替代基類對象向基類對象的引用進行賦值或初始化值或初始化 例:例: A a1; /定義基類定義基類A對象對象a1 B
23、 b1;/定義類定義類A的公用派生類的公用派生類B的對象的對象b1 A &r=a1;/定義基類對象的應用變量,并初始化定義基類對象的應用變量,并初始化 A &r=b1;/與上一行等價與上一行等價 或或 r=b1;注意:此時注意:此時r r并不是并不是b1b1的別名,也不與的別名,也不與b1b1共享同一段存儲單元。共享同一段存儲單元。它只是它只是b1b1中基類部分的別名,中基類部分的別名,r r與與b1b1中基類部分共享同一段存中基類部分共享同一段存儲單元,儲單元,r r與與b1b1具有相同的起始地址。具有相同的起始地址。38繼承與派生繼承與派生3、如果函數的參數是基類對象或基類
24、對象的引用,相應、如果函數的參數是基類對象或基類對象的引用,相應的實參可以用派生類對象的實參可以用派生類對象 例,有一函數例,有一函數fun: void fun(A &r); coutr.numendl; 在調用在調用fun函數時可以用派生類函數時可以用派生類B的對象的對象b1作實參:作實參: fun(b1);注意:此時注意:此時funfun函數只能輸出派生類中基類成員的值。函數只能輸出派生類中基類成員的值。4、派生類對象的地址可以賦給指向基類對象的指針變量,、派生類對象的地址可以賦給指向基類對象的指針變量,即指向基類對象的指針變量可以指向派生類對象即指向基類對象的指針變量可以指向派生
25、類對象39繼承與派生繼承與派生例例 5.3 用指向基類對象的指針指向派生類對象用指向基類對象的指針指向派生類對象40繼承與派生繼承與派生41繼承與派生繼承與派生42繼承與派生繼承與派生43繼承與派生繼承與派生注意:通過指向基類的指針只能訪問派生類中的基類成員,注意:通過指向基類的指針只能訪問派生類中的基類成員,而不能訪問派生類中增加的成員。而不能訪問派生類中增加的成員。44繼承與派生繼承與派生 繼承與組合繼承與組合 在一個類中以另一個類的對象作為數據成員的,稱為在一個類中以另一個類的對象作為數據成員的,稱為類的組合類的組合。繼承繼承組合組合都是軟件重用的重要方式都是軟件重用的重要方式派生類與基類派生類與基類“是是”組合類組合類“有有”縱向縱向橫向橫向45課堂練習課堂練習3. 點(點(Point)、圓(、圓(Circle)和圓柱體(和圓柱體(Cylinder)的層次結構的層次結構 分別寫出分別寫出Point類、類、Circle類和類和Cylinder類的聲明及其成員類的聲明及其成員函數的實現(xiàn)的程序,且要求各類之間是單繼承的關系。例如:函數的實現(xiàn)的程序,且要求各類之間是單繼承的關系。例如:Circle類是類是Point類的派生類,其中應有基類中的數據
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合肥職業(yè)技術學院《德語口語》2023-2024學年第一學期期末試卷
- 天津城市職業(yè)學院《閱讀與寫作》2023-2024學年第二學期期末試卷
- 廣州珠江職業(yè)技術學院《高級新聞寫作興趣小組》2023-2024學年第二學期期末試卷
- 上海市楊浦區(qū)2025年高三物理試題一輪復習典型題專項訓練含解析
- 遼寧省葫蘆島市協(xié)作校2024-2025學年高三下學期第一次教學質量檢測試題語文試題試卷含解析
- 江蘇省鹽城市響水中學2025屆高三下5月調研考試語文試題試卷含解析
- 江西師范高等專科學?!扼w育基礎》2023-2024學年第一學期期末試卷
- 寧夏葡萄酒與防沙治沙職業(yè)技術學院《道路勘測設計B》2023-2024學年第二學期期末試卷
- 安徽省蚌埠固鎮(zhèn)縣聯(lián)考2025年中考物理試題模擬試題含解析
- 四川省涼山彝族自治州德昌縣2025屆數學五下期末復習檢測模擬試題含答案
- 檔案移交清單
- 《陳情表》原文及翻譯注釋
- T∕ZZB 2763-2022 汽車用底盤橫向穩(wěn)定桿
- 減速機生產工藝流程圖
- 網絡直播行業(yè)稅收檢查指引
- SAPERP_委外業(yè)務操作手冊_v1.0
- 2022年上海公務員考試信息管理類專業(yè)真題
- 山東物業(yè)服務星級標準對照表x
- 噴塑車間員工培訓課件
- 醫(yī)療廢物管理工作督查記錄表常用
- 主要安全設施一覽表201603
評論
0/150
提交評論