




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第 5 5 章章 多態(tài)性與多態(tài)性與虛函數(shù)虛函數(shù)面向?qū)ο蟮拿嫦驅(qū)ο蟮腃+C+程序設(shè)計程序設(shè)計基礎(chǔ)基礎(chǔ)本章主要內(nèi)容本章主要內(nèi)容 1 多態(tài)性多態(tài)性 2 虛函數(shù)虛函數(shù) 3 純虛函數(shù)與抽象類純虛函數(shù)與抽象類多態(tài)性的概念多態(tài)性的概念多態(tài)性n多態(tài)性是面向?qū)ο蟮闹匾匦灾唬侵覆煌鄳B(tài)性是面向?qū)ο蟮闹匾匦灾唬侵覆煌瑢ο笫盏较嗤南r產(chǎn)生不同的行為。消息對象收到相同的消息時產(chǎn)生不同的行為。消息是指調(diào)用類的成員函數(shù),不同的行為指不同的是指調(diào)用類的成員函數(shù),不同的行為指不同的實現(xiàn),即調(diào)用不同的函數(shù);實現(xiàn),即調(diào)用不同的函數(shù);nC+支持兩種多態(tài)性:編譯時的多態(tài)性和運行支持兩種多態(tài)性:編譯時的多態(tài)性和運行時的
2、多態(tài)性;時的多態(tài)性;n編譯時的多態(tài)性是在程序編譯過程中確定函數(shù)編譯時的多態(tài)性是在程序編譯過程中確定函數(shù)操作的具體對象,通過函數(shù)重載來實現(xiàn);運行操作的具體對象,通過函數(shù)重載來實現(xiàn);運行時的多態(tài)性是在程序運行過程中才能確定函數(shù)時的多態(tài)性是在程序運行過程中才能確定函數(shù)操作的具體對象,通過虛函數(shù)來實現(xiàn)。操作的具體對象,通過虛函數(shù)來實現(xiàn)。多態(tài)的具體實現(xiàn)多態(tài)的具體實現(xiàn)多態(tài)性n在面向?qū)ο笙到y(tǒng)中,將確定操作對象在面向?qū)ο笙到y(tǒng)中,將確定操作對象(確定調(diào)確定調(diào)用哪個函數(shù)實現(xiàn)用哪個函數(shù)實現(xiàn))的過程稱為聯(lián)編,即把一條的過程稱為聯(lián)編,即把一條消息(調(diào)用類的成員函數(shù))與一個對象的方消息(調(diào)用類的成員函數(shù))與一個對象的方法
3、(具體的函數(shù)版本)相結(jié)合的過程。法(具體的函數(shù)版本)相結(jié)合的過程。n聯(lián)編有兩種:聯(lián)編有兩種:u靜態(tài)聯(lián)編,在編譯階段確定操作的具體對象,靜態(tài)聯(lián)編,在編譯階段確定操作的具體對象,也稱早期聯(lián)編、早綁定;也稱早期聯(lián)編、早綁定;u動態(tài)聯(lián)編,在系統(tǒng)運行過程中確定某一操作動態(tài)聯(lián)編,在系統(tǒng)運行過程中確定某一操作對象,也稱滯后聯(lián)編、晚綁定。對象,也稱滯后聯(lián)編、晚綁定。編譯時的多態(tài)編譯時的多態(tài)性性編譯時的多態(tài)是指在編譯階段就編譯時的多態(tài)是指在編譯階段就決定調(diào)用哪個同名函數(shù);決定調(diào)用哪個同名函數(shù);通過函數(shù)重載來實現(xiàn)。函數(shù)重載通過函數(shù)重載來實現(xiàn)。函數(shù)重載有兩種方式:有兩種方式:u在一個類中說明的函數(shù)重載;在一個類中說
4、明的函數(shù)重載;u基類成員函數(shù)在派生類中重載。基類成員函數(shù)在派生類中重載。多態(tài)性 在一個類中說明的函數(shù)重載在一個類中說明的函數(shù)重載u普通的函數(shù)重普通的函數(shù)重載:在一個類中載:在一個類中說明的重載函數(shù)說明的重載函數(shù)靠所帶參數(shù)的個靠所帶參數(shù)的個數(shù)、參數(shù)類型的數(shù)、參數(shù)類型的不同來區(qū)分不同來區(qū)分。例子:例子:class Cube public: Cube( ); Cube(int h,int w,int l) height=h; width=w; length=l; private: int height; int width; int length;Cube:Cube( ) height=1; wid
5、th=2; length=3;void main( ) Cube cube1; Cube cube2(4,5,6); 多態(tài)性 基類成員函數(shù)在派生類中重載基類成員函數(shù)在派生類中重載函數(shù)名相同,只是它們屬于不同的類。如果在派函數(shù)名相同,只是它們屬于不同的類。如果在派生類中聲明了與基類成員函數(shù)同名的新函數(shù),則生類中聲明了與基類成員函數(shù)同名的新函數(shù),則從基類繼承的同名函數(shù)的所有重載形式都會被覆從基類繼承的同名函數(shù)的所有重載形式都會被覆蓋,即使蓋,即使函數(shù)的參數(shù)表不同函數(shù)的參數(shù)表不同。區(qū)分這種函數(shù)的方式有兩種:區(qū)分這種函數(shù)的方式有兩種: (1) 使用使用“類名類名:”加以區(qū)分加以區(qū)分(限定作用域限定作用
6、域); 例:例: Circles:show 和和 Point:show (2) 根據(jù)根據(jù)對象對象加以區(qū)分加以區(qū)分; 例:例:Circles Acircle; Point Apoint; Acircle.show( ); Apoint.show( );多態(tài)性 基類成員函數(shù)在派生類中重載基類成員函數(shù)在派生類中重載n例例: 從基類的點類中派生出一個圓類。從基類的點類中派生出一個圓類。基類基類Point中的成員函數(shù)中的成員函數(shù)area和派生類和派生類Circles中的成員函數(shù)中的成員函數(shù)area都不帶參數(shù),都不帶參數(shù),重載時依靠對象來進行區(qū)分。重載時依靠對象來進行區(qū)分。多態(tài)性 基類成員函數(shù)在派生類中重
7、載基類成員函數(shù)在派生類中重載class Point public: Point(int x,int y) Point:x=x; Point:y=y; float area( ) return 0.0; private: int x; int y; ;class Circles: public Point public: Circles(int x,int y,int ardius):Point(x,y) Circles:radius=radius; float area( ) return 3.1416*radius*radius; private: int radius; ; void ma
8、in( ) Point point1(10,10); Circles circle1(5,5,20); coutpoint1.area( )endl; coutcircle1.area( )endl; coutcircle1.Point:area( )show(); /通過對象指針訪問成員函數(shù)通過對象指針訪問成員函數(shù)虛 函 數(shù) 引入派生類后的對象指針引入派生類后的對象指針n引入派生類概念后,任何一個被說引入派生類概念后,任何一個被說明為指向基類對象的指針都可以指明為指向基類對象的指針都可以指向它的向它的公有公有派生類派生類;n 指向基類對象的指針,可以指向它指向基類對象的指針,可以指向它的公有
9、派生類的對象,而的公有派生類的對象,而不能指向不能指向它的它的私有派生類的對象私有派生類的對象。虛 函 數(shù) 引入派生類后的對象指針引入派生類后的對象指針虛 函 數(shù) 不能將一個聲明為指向派生類對象的不能將一個聲明為指向派生類對象的指針指向其基類的一個對象;指針指向其基類的一個對象; 聲明為指向基類對象的指針,當(dāng)其指聲明為指向基類對象的指針,當(dāng)其指向公有派生類對象時,只能用它來訪問向公有派生類對象時,只能用它來訪問派派生類中從基類繼承來的成員生類中從基類繼承來的成員,不能訪問公,不能訪問公有派生類中新添的成員。有派生類中新添的成員。l例例5.1.1:計算和顯示研究生和本科生的學(xué)費:計算和顯示研究生
10、和本科生的學(xué)費虛函數(shù)的作用虛函數(shù)的作用 在例在例5.1.1中,基類中中,基類中calfee( )和和disp( )無無virtual聲明,則當(dāng)指向基類對象的指針聲明,則當(dāng)指向基類對象的指針ptr指向其派生類指向其派生類Graduate對象時,通過對象時,通過ptr只只能訪問能訪問Graduate中從基類繼承下來的成員中從基類繼承下來的成員如如calfee( )和和disp( ),而不能訪問派生類的,而不能訪問派生類的calfee( )和和disp( ) ;虛函數(shù)的作用虛函數(shù)的作用 給基類給基類calfee( )和和disp( )加上加上virtual聲明聲明(即虛函數(shù)即虛函數(shù))后,當(dāng)后,當(dāng)pt
11、r指向其派生類指向其派生類Graduate對象時,調(diào)用對象時,調(diào)用ptr-calfee( )和和ptr-disp( )時就覆蓋了基類的同名函數(shù),調(diào)用時就覆蓋了基類的同名函數(shù),調(diào)用派生類的成員派生類的成員calfee( )和和disp( ); 虛函數(shù)的定義,使用戶可通過將指向基虛函數(shù)的定義,使用戶可通過將指向基類對象的指針指向不同的派生類對象,來類對象的指針指向不同的派生類對象,來調(diào)用派生類中與基類同名、實現(xiàn)算法不同調(diào)用派生類中與基類同名、實現(xiàn)算法不同的函數(shù),實現(xiàn)運行時的多態(tài)。的函數(shù),實現(xiàn)運行時的多態(tài)。 虛函數(shù)的作用虛函數(shù)的作用n多態(tài)性的實現(xiàn)與聯(lián)編(或綁定多態(tài)性的實現(xiàn)與聯(lián)編(或綁定binding
12、)有關(guān);有關(guān);n聯(lián)編是確定函數(shù)調(diào)用的具體對象的過程,聯(lián)編是確定函數(shù)調(diào)用的具體對象的過程,分為靜態(tài)聯(lián)編分為靜態(tài)聯(lián)編(編譯時確定編譯時確定)和動態(tài)聯(lián)編和動態(tài)聯(lián)編(運運行時確定行時確定);虛函數(shù)的作用虛函數(shù)的作用n在上例中有在上例中有“ptr-disp( );”;單憑此語句,;單憑此語句,編譯系統(tǒng)無法確定調(diào)用那個類對象的函數(shù),編譯系統(tǒng)無法確定調(diào)用那個類對象的函數(shù),因為編譯階段只作語法檢查;因為編譯階段只作語法檢查;n到了運行階段,到了運行階段,ptr指向哪個對象,就調(diào)用哪指向哪個對象,就調(diào)用哪個對象的個對象的disp函數(shù)。例如函數(shù)。例如ptr先指向基類、再先指向基類、再指向派生類指向派生類,那么先后
13、將調(diào)用同一類族中,那么先后將調(diào)用同一類族中不同類的虛函數(shù);不同類的虛函數(shù);n虛函數(shù)是實現(xiàn)動態(tài)聯(lián)編的基礎(chǔ),在運行階段虛函數(shù)是實現(xiàn)動態(tài)聯(lián)編的基礎(chǔ),在運行階段將虛函數(shù)與類對象關(guān)聯(lián)在一起的過程即動態(tài)將虛函數(shù)與類對象關(guān)聯(lián)在一起的過程即動態(tài)聯(lián)編。聯(lián)編。虛函數(shù)的聲明虛函數(shù)的聲明n虛函數(shù)的定義在基類中進行,即在基類虛函數(shù)的定義在基類中進行,即在基類中給想定義為虛函數(shù)的成員函數(shù)聲明前中給想定義為虛函數(shù)的成員函數(shù)聲明前加關(guān)鍵詞加關(guān)鍵詞 virtual ,即:,即:virtual 類型說明符類型說明符 函數(shù)名(參數(shù)表);函數(shù)名(參數(shù)表);n基類中的某成員函數(shù)被聲明為虛函數(shù)后,基類中的某成員函數(shù)被聲明為虛函數(shù)后,此虛
14、函數(shù)可以在一個或多個派生類中被此虛函數(shù)可以在一個或多個派生類中被重新定義;重新定義;n虛函數(shù)重新定義時,虛函數(shù)重新定義時,不需要不需要virtual聲明;聲明;虛函數(shù)的聲明虛函數(shù)的聲明n在派生類中重新定義虛函數(shù),要求函數(shù)原在派生類中重新定義虛函數(shù),要求函數(shù)原型包括返回類型、函數(shù)名、參數(shù)個數(shù)、參型包括返回類型、函數(shù)名、參數(shù)個數(shù)、參數(shù)類型的順序,必須與基類中的原型數(shù)類型的順序,必須與基類中的原型完全完全一致一致,僅函數(shù)實現(xiàn)不同;,僅函數(shù)實現(xiàn)不同;n可通過成員函數(shù)調(diào)用、指針或引用來訪問可通過成員函數(shù)調(diào)用、指針或引用來訪問虛函數(shù);虛函數(shù);n定義一個指向基類對象的指針定義一個指向基類對象的指針ptr,并
15、讓,并讓它指向同一類族中要調(diào)用此虛函數(shù)的對象;它指向同一類族中要調(diào)用此虛函數(shù)的對象;n通過通過ptr調(diào)用的虛函數(shù)就是調(diào)用的虛函數(shù)就是ptr指向的對象指向的對象的函數(shù)。的函數(shù)。例例 :#include class B0/基類基類B0聲明聲明public:/外部接口外部接口virtual void display( ) /虛成員函數(shù)虛成員函數(shù) coutB0:display( )endl; ;class B1: public B0/公有派生公有派生 public: void display( ) coutB1:display( )endl; ;class D1: public B1/公有派生公有派生
16、 public: void display( ) coutD1:display( )display( ); void main( )/主函數(shù)主函數(shù) B0 b0, *p;/聲明基類對象和指針聲明基類對象和指針B1 b1;/聲明派生類對象聲明派生類對象D1 d1;/聲明派生類對象聲明派生類對象p=&b0;fun(p);/調(diào)用基類調(diào)用基類B0函數(shù)成員函數(shù)成員p=&b1;fun(p);/調(diào)用派生類調(diào)用派生類B1函數(shù)成員函數(shù)成員p=&d1;fun(p);/調(diào)用派生類調(diào)用派生類D1函數(shù)成員函數(shù)成員運行結(jié)果:運行結(jié)果:B0:display( )B1:display( )D1:disp
17、lay( )25 虛函數(shù)與重載函數(shù)的區(qū)別虛函數(shù)與重載函數(shù)的區(qū)別函數(shù)重載中要求重載函數(shù)的參數(shù)類型、參數(shù)個函數(shù)重載中要求重載函數(shù)的參數(shù)類型、參數(shù)個數(shù)不同,僅是函數(shù)名相同;數(shù)不同,僅是函數(shù)名相同;虛函數(shù)的重定義,要求函數(shù)名、返回類型、參虛函數(shù)的重定義,要求函數(shù)名、返回類型、參數(shù)個數(shù)、參數(shù)類型和順序都與基類中的函數(shù)原數(shù)個數(shù)、參數(shù)類型和順序都與基類中的函數(shù)原型型完全一致完全一致。若不一致,按如下情況處理:。若不一致,按如下情況處理: 1、函數(shù)參數(shù)相同,函數(shù)參數(shù)相同,僅返回類型不同僅返回類型不同,作,作出錯出錯處理;處理; 2、函數(shù)參數(shù)有差異,函數(shù)參數(shù)有差異,僅函數(shù)名相同僅函數(shù)名相同,系統(tǒng)會,系統(tǒng)會將它認
18、為是一般的函數(shù)重載,將將它認為是一般的函數(shù)重載,將丟失虛特性丟失虛特性。例:例:5.2.2虛 函 數(shù) 什么時候使用虛函數(shù)?什么時候使用虛函數(shù)?如果將某成員函數(shù)所在的類作為基類,且如果將某成員函數(shù)所在的類作為基類,且該成員函數(shù)需要在派生類中重新定義,就該成員函數(shù)需要在派生類中重新定義,就將其聲明為虛函數(shù);將其聲明為虛函數(shù);不要將那些不需要在派生類中重新定義的不要將那些不需要在派生類中重新定義的基類成員函數(shù)聲明為虛函數(shù);基類成員函數(shù)聲明為虛函數(shù);如果不是通過指向派生類對象的基類對象如果不是通過指向派生類對象的基類對象指針來訪問被聲明為虛函數(shù)的成員函數(shù),指針來訪問被聲明為虛函數(shù)的成員函數(shù),就不要聲明
19、虛函數(shù),因為通過對象訪問的就不要聲明虛函數(shù),因為通過對象訪問的成員函數(shù)在編譯時就能完全確定。成員函數(shù)在編譯時就能完全確定。虛 函 數(shù)n在類的體系中訪問虛函數(shù),可使用指向基類對象的指在類的體系中訪問虛函數(shù),可使用指向基類對象的指針或?qū)悓ο蟮囊茫部梢允褂脤ο竺苯釉L問;針或?qū)悓ο蟮囊茫部梢允褂脤ο竺苯釉L問;n派生類中沒重新定義虛函數(shù)時,該類的對象將使用基派生類中沒重新定義虛函數(shù)時,該類的對象將使用基類中的虛函數(shù)代碼(繼承下來的);類中的虛函數(shù)代碼(繼承下來的);n虛函數(shù)必須是一個類的成員函數(shù),不能是友元函數(shù),虛函數(shù)必須是一個類的成員函數(shù),不能是友元函數(shù),但它可以是另一個類的友元成
20、員;但它可以是另一個類的友元成員;n構(gòu)造函數(shù)不能被聲明為構(gòu)造函數(shù)不能被聲明為virtual,但析構(gòu)函數(shù)可以被聲,但析構(gòu)函數(shù)可以被聲明為明為virtual;n靜態(tài)成員函數(shù)(不受限于某個對象)和內(nèi)聯(lián)函數(shù)(不靜態(tài)成員函數(shù)(不受限于某個對象)和內(nèi)聯(lián)函數(shù)(不在運行中動態(tài)確定其位置)不能聲明在運行中動態(tài)確定其位置)不能聲明為為virtual。 虛函數(shù)使用注意虛函數(shù)使用注意: 虛析構(gòu)函數(shù)虛析構(gòu)函數(shù)n析構(gòu)函數(shù)可以被聲明為虛函數(shù),例如:析構(gòu)函數(shù)可以被聲明為虛函數(shù),例如: class B public: virtual B( ); ;n 若基類的析構(gòu)函數(shù)聲明為虛函數(shù),則由該基類若基類的析構(gòu)函數(shù)聲明為虛函數(shù),則由該
21、基類派生的所有派生類的析構(gòu)函數(shù)也都自動成為虛派生的所有派生類的析構(gòu)函數(shù)也都自動成為虛函數(shù),即使派生類的析構(gòu)函數(shù)與基類的析構(gòu)函函數(shù),即使派生類的析構(gòu)函數(shù)與基類的析構(gòu)函數(shù)不同名;數(shù)不同名;n虛函數(shù)析構(gòu)函數(shù)的作用:當(dāng)用虛函數(shù)析構(gòu)函數(shù)的作用:當(dāng)用delete刪除對象時,刪除對象時,能確保析構(gòu)函數(shù)被正確執(zhí)行。能確保析構(gòu)函數(shù)被正確執(zhí)行。 虛析構(gòu)函數(shù)的要點:虛析構(gòu)函數(shù)的要點:n將析構(gòu)函數(shù)聲明為虛函數(shù),可以正確地執(zhí)行析構(gòu)將析構(gòu)函數(shù)聲明為虛函數(shù),可以正確地執(zhí)行析構(gòu)函數(shù),即先調(diào)用派生類的析構(gòu)函數(shù),再調(diào)用基類函數(shù),即先調(diào)用派生類的析構(gòu)函數(shù),再調(diào)用基類的析構(gòu)函數(shù)的析構(gòu)函數(shù);n當(dāng)基類的析構(gòu)函數(shù)為虛函數(shù)時,無論指針指向同
22、當(dāng)基類的析構(gòu)函數(shù)為虛函數(shù)時,無論指針指向同一類族中的哪個對象,系統(tǒng)都會動態(tài)聯(lián)編,一類族中的哪個對象,系統(tǒng)都會動態(tài)聯(lián)編, 調(diào)用調(diào)用相應(yīng)的析構(gòu)函數(shù),否則系統(tǒng)只會執(zhí)行基類的析構(gòu)相應(yīng)的析構(gòu)函數(shù),否則系統(tǒng)只會執(zhí)行基類的析構(gòu)函數(shù)而不執(zhí)行派生類的析構(gòu)函數(shù)函數(shù)而不執(zhí)行派生類的析構(gòu)函數(shù);n如果如果delete的操作對象使用了指向派生類對象的基的操作對象使用了指向派生類對象的基類指針,系統(tǒng)就會調(diào)用相應(yīng)類的析構(gòu)函數(shù);類指針,系統(tǒng)就會調(diào)用相應(yīng)類的析構(gòu)函數(shù);n一般都將析構(gòu)函數(shù)聲明為虛函數(shù),而不管基類是一般都將析構(gòu)函數(shù)聲明為虛函數(shù),而不管基類是否需要析構(gòu)函數(shù)。否需要析構(gòu)函數(shù)。n對象指針:指向基類類型的指針可以指對象指針:
23、指向基類類型的指針可以指向其公有派生類對象,但只能訪問從基向其公有派生類對象,但只能訪問從基類繼承的成員;類繼承的成員;n虛函數(shù):用于實現(xiàn)滯后聯(lián)編,在基類中虛函數(shù):用于實現(xiàn)滯后聯(lián)編,在基類中將成員函數(shù)聲明為將成員函數(shù)聲明為virtual特性,就可以特性,就可以在派生類中對該成員函數(shù)重新定義(定在派生類中對該成員函數(shù)重新定義(定義原型與基類中的完全相同)。當(dāng)基類義原型與基類中的完全相同)。當(dāng)基類指針指向派生類時,即可訪問派生類重指針指向派生類時,即可訪問派生類重新定義的函數(shù),從而實現(xiàn)多態(tài)性。新定義的函數(shù),從而實現(xiàn)多態(tài)性。虛函數(shù)小結(jié)虛函數(shù)小結(jié)本章主要內(nèi)容本章主要內(nèi)容 1 多態(tài)性多態(tài)性 2 虛函數(shù)虛
24、函數(shù) 3 純虛函數(shù)與抽象類純虛函數(shù)與抽象類n如果基類只表達一些抽象的概念,而不和具體如果基類只表達一些抽象的概念,而不和具體的事物相聯(lián)系,就不在此基類中定義函數(shù)。但的事物相聯(lián)系,就不在此基類中定義函數(shù)。但希望基類必須為它的派生類提供一個公共的界希望基類必須為它的派生類提供一個公共的界面,可以通過在基類中加入面,可以通過在基類中加入純虛函數(shù)純虛函數(shù)(prue virtual function)來實現(xiàn)。來實現(xiàn)。n純虛函數(shù)是一個在基類中說明的虛函數(shù),它純虛函數(shù)是一個在基類中說明的虛函數(shù),它在在該基類中沒有定義該基類中沒有定義,但要求任何,但要求任何派生類都必須派生類都必須定義定義自己的虛函數(shù)版本。純
25、虛函數(shù)自己的虛函數(shù)版本。純虛函數(shù)定義形式定義形式:virtual type 函數(shù)函數(shù)名名(參數(shù)表參數(shù)表) = 0;n“=0”只表示該成員函數(shù)是純虛的。只表示該成員函數(shù)是純虛的。純虛函數(shù)純虛函數(shù)純虛 函 數(shù)與抽象類例如:例如:#includeclass shape /定義基類定義基類 public: virtual float area ( ) = 0; /定義純虛函數(shù)定義純虛函數(shù) virtual void Disp( ) = 0; /定義純虛函數(shù)定義純虛函數(shù);class rectangles:public shape /定義圖形的派生類矩形類定義圖形的派生類矩形類 public: float
26、area( ); /可以定義可以定義 void Disp( ); /可以定義可以定義; 純虛函數(shù)使用注意:純虛函數(shù)使用注意:n純虛函數(shù)只有函數(shù)的名字,不具備函數(shù)功能,純虛函數(shù)只有函數(shù)的名字,不具備函數(shù)功能,不能被調(diào)用。只有在派生類中定義以后,它才不能被調(diào)用。只有在派生類中定義以后,它才有函數(shù)的功能,才可以調(diào)用;有函數(shù)的功能,才可以調(diào)用;n純虛函數(shù)的作用只是在基類中保留一個函數(shù)的純虛函數(shù)的作用只是在基類中保留一個函數(shù)的名字,以便在派生類中定義它的版本;名字,以便在派生類中定義它的版本;n如果基類中沒有保留名字,無法實現(xiàn)多態(tài)性;如果基類中沒有保留名字,無法實現(xiàn)多態(tài)性;n如果在派生類中沒有定義純虛函
27、數(shù)的版本,則如果在派生類中沒有定義純虛函數(shù)的版本,則該虛函數(shù)在派生類中仍然是純虛函數(shù)。該虛函數(shù)在派生類中仍然是純虛函數(shù)。抽象類抽象類純虛函數(shù)與抽象類n抽象類:指包含純虛函數(shù)的類。抽象類:指包含純虛函數(shù)的類。n作用作用n抽象類為抽象和設(shè)計的目的而聲明,將有關(guān)的數(shù)抽象類為抽象和設(shè)計的目的而聲明,將有關(guān)的數(shù)據(jù)和行為組織在一個繼承層次結(jié)構(gòu)中,保證派生據(jù)和行為組織在一個繼承層次結(jié)構(gòu)中,保證派生類具有要求的行為。類具有要求的行為。n對于暫時無法實現(xiàn)的函數(shù),可以聲明為純虛函數(shù),對于暫時無法實現(xiàn)的函數(shù),可以聲明為純虛函數(shù),留給派生類去實現(xiàn)。留給派生類去實現(xiàn)。n注意注意n抽象類只能作為基類來使用。抽象類只能作為基類來使用。n不能聲明抽象類的對象。不能聲明抽象類的對象。例例 :純虛函數(shù)與抽象類#include class B0 /抽象基類抽象基類B0聲明聲明 public: /外部接口外部接口virtual void display( )=0; /純虛函數(shù)成員純虛函數(shù)成員;class B1: public B0 /公有派生公有派生 public:void display( )coutB1:display()endl; /虛成員函數(shù)虛成員函數(shù);class D1: public B1 /公有派生公有派生 public:void display( )cout
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)領(lǐng)域綠色能源技術(shù)應(yīng)用
- 工業(yè)設(shè)計在產(chǎn)品創(chuàng)新中的作用與價值研究
- 工作中的情緒管理與壓力緩解
- 工業(yè)設(shè)計與產(chǎn)品創(chuàng)新的策略研究
- 工作效率提升工具及方法研究
- 工作環(huán)境優(yōu)化對員工滿意度的影響
- 工程塑料在汽車領(lǐng)域的應(yīng)用
- 工廠廠區(qū)綠化規(guī)劃
- 工程機械動載荷下的結(jié)構(gòu)強度分析
- 工程機械的維護與修理技術(shù)培訓(xùn)
- 蘇科版初中物理知識點總結(jié)(含所有公式,絕對全~~~~)
- 《國際私法》教學(xué)全套課件
- 基建項目建設(shè)綜合管理信息系統(tǒng)建設(shè)方案
- 一年級下冊音樂教案 (簡譜) (演唱)同坐小竹排(7) 湘藝版
- 砂石料加工廠勞務(wù)外包服務(wù)采購項目
- 列車網(wǎng)絡(luò)控制技術(shù)-復(fù)習(xí)打印版
- 福建高考名著《紅樓夢》填空題+答案
- 商標法期末復(fù)習(xí)
- 材料力學(xué)計算試題(庫)完整
- 投資控股集團有限公司安全生產(chǎn)責(zé)任制暫行辦法
- NGW型行星齒輪傳動系統(tǒng)的優(yōu)化設(shè)計
評論
0/150
提交評論