




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 第十二講 承繼與派生12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)1.闡明格式class: private: protected: public: ;12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)基類闡明表: 列出一切基類。每個基類的闡明格式為: 派生方式分為:公有派生,關鍵字為public;維護派生,關鍵字為protected;私有派生,關鍵字為private;派生方式?jīng)Q議了從基類承繼
2、來的成員在派生類中的屬性。(P256.表8)12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)針對承繼與派生的關系,應留意:一個類可以派生出多個派生類。一個類可有一個或多個基類,分別稱為單一承繼和多重承繼。派生類又可有派生類,稱為多級承繼。承繼關系不可循環(huán)?;惖挠言P系、構造函數(shù)、析構函數(shù)都不能被派生類承繼。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)2.派生類的構造函數(shù)和析構函數(shù)假設類A是類B的派生類(1) 類A對象的創(chuàng)建必然包含類B對象的創(chuàng)建。顯然,類A對象也包含類B對象的私有成員。
3、(2) 類A對象的創(chuàng)建和釋放和其基類對象及成員對象相聯(lián)絡。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)派生類對象的初始化: 需求對基類的數(shù)據(jù)成員、派生類本身所含對象成員的數(shù)據(jù)成員以及其它新增的數(shù)據(jù)成員同時進展初始化。 派生類構造函數(shù)的普通格式:(): 12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)初始化符表的格式: (), (), (), ()是與所指基類中某個構造函數(shù)的參數(shù)表。是與所屬類中某個構造函數(shù)的參數(shù)表。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處
4、置12.4 多態(tài)性與虛函數(shù)系統(tǒng)創(chuàng)建派生類對象的步驟:(1)調用各基類的構造函數(shù),調用順序按照它們被承繼時聲明的順序(從左至右)。(2)假設派生類本身含有對象成員,就調用各對象成員的構造函數(shù),調用順序按照它們在派生類中聲明時的順序(從左至右)。(3)調用派生類本身的構造函數(shù)。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)系統(tǒng)釋放派生類對象的步驟:(1)調用派生類本身的析構函數(shù)。(2) 調用各對象成員的析構函數(shù),調用順序按照它們在派生類中聲明時的相反順序(從右至左)。(3)調用各基類的析構函數(shù),調用順序按照它們被承繼時聲明的相反順序(從右至左)
5、。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)例1: 派生類的簡單實例Program 8-3.cpp (P.260) 12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)情況一:經(jīng)過承繼可使派生類A對象擁有基類B的對象。情況二:經(jīng)過類A中對象成員也可使類A對象擁有其它類B的對象。兩種情況之間的區(qū)別?12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)在情況一中,派生類A的對象必然是基類B的對象。類A對象具有類B對象的一切特征;此外類A對象還具有
6、類B沒有的其它特征。(is a)在情況二中,成員對象(類B對象)是類A對象的組成部分。(has a)12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)兩點留意:(1) 留意構造函數(shù)和析構函數(shù)的執(zhí)行次序。(2) 留意“組裝關系和承繼關系不同決議的對象成員(或基類成員) 訪問方式以及對其對象可施加操作方面的不同。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)(1)“承繼關系中的調用方式: (2)“組裝關系中的調用方式: .例2: 對基類對象(對象成員)中公有成員的調用方式12.1 派生類12.2
7、 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)1.友元關系以及靜態(tài)成員的承繼 (2)當派生類從基類承繼過來的成員原先是某類的友元,那么派生類的成員依然是某類的友元。友元關系的承繼: (1) 當基類含有友元成員時,該基類的派生類不一定含有上述友元成員。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)靜態(tài)成員的承繼: (1) 基類中位于公有段或者維護段的靜態(tài)成員,在派生類中依然是靜態(tài)成員。 (2) 靜態(tài)成員的調用方式: : (3) 無論創(chuàng)建多少某靜態(tài)成員的對象,都只需一份拷貝,為基類和派生類的一切對象共享。12.1
8、派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)2. 派生類對象間賦值操作的原那么(1) 假設派生類有本人的賦值運算符的重載定義,即按該重載函數(shù)處置。(2) 假設派生類未定義本人的賦值操作,而基類定義了賦值操作,那么系統(tǒng)自動定義派生類賦值操作,其中基類成員的賦值按基類定義的賦值操作進展。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)(3) 假設派生類和基類都沒有定義賦值操作,那么系統(tǒng)自動定義缺省賦值操作(按位拷貝)。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4
9、 多態(tài)性與虛函數(shù)3. 基類對象與派生類對象之間的賦 值關系 基類對象=派生類對象 只是將派生類對象中“共性成員 賦值給基類對象。 反方向賦值不允許。(2) 指向基類對象的指針=派生類對 象的地址經(jīng)過上述指針可直接訪問基類成員部分,但只需經(jīng)過指針類型強迫轉換才可訪問非基類成員部分。反方向賦值不允許。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)4. 上述賦值規(guī)定的根據(jù) 在派生類對象創(chuàng)建后,其在內存中的存儲方式是先存其基類的成員,再存本身的各成員。因此,運用基類對象指針指向其派生類對象時,同指向一個基類對象的效果一樣。但不能保證基類對象指針對于
10、派生類自有成員實例的訪問或調用。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)例3. 賦值規(guī)定的簡單例如 Program 8-4. (P. 264)12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)1. 單一承繼時基類與派生類間重名成員的處置 對派生類而言,不加類名限定時默以為是處置派生類成員,而要訪問基類重名成員時,那么必需經(jīng)過類名限定。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)例4. 單一承繼時重名成員處置規(guī)定的簡單例如 Prog
11、ram 8-5. cpp (P. 266)12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)2. 多重承繼時兩基類間重名成員的處置 對派生類而言,不加類名限定時默以為是處置派生類成員,而要訪問基類重名成員時,那么必需經(jīng)過類名限定。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)3. 多級承繼時(非虛擬承繼)包含兩個基類實例情況的處置 多級混合承繼情況下,假設類CD從兩條不同“途徑同時對類A進展了普通性承繼非虛擬承繼的話,那么類D的對象中會同時包含著兩個類CA的實例。此時,對類CD而言,要經(jīng)過類
12、名限定來指定訪問兩個類CA實例中的哪一個。類CD類CB1類CB2類CA12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)上述各類之間的承繼關系class CAclass CB 1: public Aclass CB2 : public Aclass CD : public CB1, public CB2類CD對象的存儲構造表示圖( ( (CA) CB1 ) ( (CA) CB2 ) CD )12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)例5. 上述多級混合承繼關系運用舉例。(P.268)類C
13、A人員類;類CB1學生類;類CB2助教類;類CD學生助教類。(2)類CA人員類;類CB1學生類;類CB2工人類;類CD工人學生類。(3) 類CA家具類;類CB1沙發(fā)類;類CB2床類;類CD沙發(fā)床類。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)#include class A /基類Apublic:int a;A (int x) a=x; void showall() cout a= a endl; class B: public A /派生類Bpublic:int b;B(int x):A(x-1)b=x;例6:運用實例12.1 派生類1
14、2.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)class C:public A /派生類Cpublic:int c; C(int x):A(x-1)c=x;class D:public B,public C public: int d;D(int x, int y, int z):B(x+1),C(y+2)d=z;12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)void showall() coutC:a=C:aendl; coutB:a=B:aendl;/*在類D定義范圍內,要經(jīng)過類名限定來指定訪問兩個類
15、A實例中的哪一個*/ coutb,c,d=b, c, dendl; /b、c、d不重名,具有獨一性 ;12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù) void main() /主函數(shù)D Dobj(101, 202, 909); Dobj.showall();cout-endl;coutDobj.C:a=Dobj.C:aendl;/訪問類D的從C承繼而來的acoutDobj.B:a=Dobj.B:aendl; 程序執(zhí)行后的顯示結果如下:C:a=203B:a=101b,c,d=102, 204, 909-Dobj.C:a=203Dobj.B:a
16、=10112.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)1. 函數(shù)重載(overloading)與靜態(tài)聯(lián)編(static binding)函數(shù)重載overloading(第八講) 允許多個不同函數(shù)運用同一個函數(shù)名,但要求這些同名函數(shù)具有不同的參數(shù)表。參數(shù)表中的參數(shù)個數(shù)不同;參數(shù)表中對應的參數(shù)類型不同;參數(shù)表中不同類型參數(shù)的次序不同。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)例7. 函數(shù)重載(overloading)的例子 int abs (int n) return (n0?-n:n)
17、;float abs (float n) if (fdraw(); pObj=&cir1; pObj-draw(); pObj=&tri1; pObj-draw(); 12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)例10. 假設inte_algo為基類,其中闡明了一個虛函數(shù)integrate,并在其三個派生類中,也闡明了該虛函數(shù)integrate運用不同方法計算定積分。那么,可運用函數(shù)integrateFunc來實現(xiàn)調用不同虛函數(shù)integrate的目的: void integrateFunc(inte_algo * p)
18、/基類指針p可指向任一派生類的對象p-integrate(); /調用的將是不同派生類的integrate函數(shù)主調函數(shù)處運用: integrateFunc( ); 12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)在編譯階段,系統(tǒng)無法確定終究要調用哪一個派生類的integrate。此種情況下,將采用動態(tài)聯(lián)編方式來處置:在運轉階段,經(jīng)過p指針的當前值,去動態(tài)地確定對象所屬類,而后找到對應虛函數(shù)。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)程序運用虛函數(shù)的優(yōu)點在于:可使程序簡單易讀。使得程序模塊間的獨立性加強。添加了程序的易維護性。提高了程序中“信息隱藏的等級。12.1 派生類12.2 其他特征的承繼關系12.3 派生關系中的二義性處置12.4 多態(tài)性與虛函數(shù)3.純虛函數(shù)與籠統(tǒng)基類假設不預備在基類的虛函數(shù)中做任何事情,那么可運用如下的格式將該虛函數(shù)闡明成純虛函數(shù): virtual =0;12.1 派生類12.2 其他特征的承繼關系12.3 派生關
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 后臺服務合同范本
- 廠房抵押欠款合同范本
- 合作安裝合同范本
- 額抵押借款合同范本
- 化糞池抽糞合同范例
- 賣吊牌合同范本
- ktv vi設計合同范本
- 合伙設立公司合同范本
- 保安用工協(xié)議合同范本
- 專利轉讓押金合同范本
- 社會主義核心價值觀-團課課件
- 城市社會學(2015)課件
- 年產(chǎn)2萬噸馬來酸二乙酯技改建設項目環(huán)評報告書
- 中國古代文論教程完整版課件
- 中班美工區(qū)角活動教案10篇
- SJG 103-2021 無障礙設計標準-高清現(xiàn)行
- 皇冠假日酒店智能化系統(tǒng)安裝工程施工合同范本
- 路面工程重點、關鍵、和難點工程的施工方案(技術標)
- 合肥市城市大腦·數(shù)字底座白皮書2020
- 機電預留預埋工程施工組織設計方案
- 2022年三八婦女節(jié)婦女權益保障法律知識競賽題庫及答案(共290題)
評論
0/150
提交評論