




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)第第5 5章章 運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)5.1 面向?qū)ο蟮闹匾卣鳎憾鄳B(tài)性面向?qū)ο蟮闹匾卣鳎憾鄳B(tài)性 5.2 運(yùn)行時(shí)的多態(tài)性運(yùn)行時(shí)的多態(tài)性 5.3 虛函數(shù)虛函數(shù) 5.4 純虛函數(shù)與抽象類(lèi)純虛函數(shù)與抽象類(lèi) 第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)5.1 面向?qū)ο蟮闹匾卣鳎憾鄳B(tài)性面向?qū)ο蟮闹匾卣鳎憾鄳B(tài)性多態(tài)性多態(tài)性(polymorphism)是面向?qū)ο蟪绦蛟O(shè)計(jì)的又一個(gè)重是面向?qū)ο蟪绦蛟O(shè)計(jì)的又一個(gè)重要特性。要特性。p 多態(tài)性體現(xiàn)了多態(tài)性體現(xiàn)了不同層次的類(lèi)以及一個(gè)類(lèi)的內(nèi)部,類(lèi)的同名成員函數(shù)之間的關(guān)系p多態(tài)性多態(tài)性提供了程序設(shè)計(jì)更大的靈活性提供了程序設(shè)計(jì)更大的靈活
2、性p多態(tài)性多態(tài)性可以降低程序的復(fù)雜性可以降低程序的復(fù)雜性p多態(tài)性多態(tài)性可以設(shè)計(jì)與實(shí)現(xiàn)一個(gè)易于擴(kuò)展的系統(tǒng)可以設(shè)計(jì)與實(shí)現(xiàn)一個(gè)易于擴(kuò)展的系統(tǒng)第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi) 多態(tài)性多態(tài)性:就是不同對(duì)象收到相同的消息時(shí),產(chǎn)生不同的動(dòng)作。 通俗地說(shuō),多態(tài)性是指用一個(gè)名字定義不同的函數(shù),這些函數(shù)執(zhí)行不同但又類(lèi)似的操作,即用同樣的接口訪問(wèn)功能不同的函數(shù),從而實(shí)現(xiàn)“一個(gè)接口,多種方法一個(gè)接口,多種方法”例例1:漢字里的:漢字里的“開(kāi)開(kāi)”例例2:狗的嗅覺(jué):狗的嗅覺(jué)例例3:一個(gè)父親,不同兒子:一個(gè)父親,不同兒子5.1.1 多態(tài)性概述多態(tài)性概述第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)5.1.2 面向?qū)ο笕髾C(jī)制面向?qū)ο笕髾C(jī)制第5
3、章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)多態(tài)性可以分為:多態(tài)性可以分為:l 重載多態(tài)重載多態(tài)l 強(qiáng)制多態(tài)強(qiáng)制多態(tài)l 參數(shù)多態(tài)參數(shù)多態(tài)l 包含多態(tài)包含多態(tài)5.1.3 多態(tài)性的分類(lèi)多態(tài)性的分類(lèi)第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi) 重載多態(tài)重載多態(tài) 專(zhuān)用多態(tài)專(zhuān)用多態(tài) 強(qiáng)制多態(tài)強(qiáng)制多態(tài)多態(tài)多態(tài) 參數(shù)多態(tài)參數(shù)多態(tài) 通用多態(tài)通用多態(tài) 包含多態(tài)包含多態(tài)多態(tài)性分類(lèi)示意圖多態(tài)性分類(lèi)示意圖第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)u 強(qiáng)制多態(tài)強(qiáng)制多態(tài)-類(lèi)型轉(zhuǎn)換類(lèi)型轉(zhuǎn)換一一系統(tǒng)預(yù)定義類(lèi)型:系統(tǒng)預(yù)定義類(lèi)型:兩種轉(zhuǎn)換:隱式和顯式兩種轉(zhuǎn)換:隱式和顯式1、隱式類(lèi)型轉(zhuǎn)換、隱式類(lèi)型轉(zhuǎn)換規(guī)則:規(guī)則:(1)在附值表達(dá)式在附值表達(dá)式A=B時(shí),將時(shí),將B值轉(zhuǎn)換成值轉(zhuǎn)換成A
4、的類(lèi)型,然后賦值的類(lèi)型,然后賦值#include iostream.hvoid main() int i; float f=3.333; i=f; coutfendl; coutiendl;第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)u 強(qiáng)制多態(tài)強(qiáng)制多態(tài)-類(lèi)型轉(zhuǎn)換類(lèi)型轉(zhuǎn)換一一系統(tǒng)預(yù)定義類(lèi)型:系統(tǒng)預(yù)定義類(lèi)型:兩種轉(zhuǎn)換:隱式和顯式兩種轉(zhuǎn)換:隱式和顯式1、隱式類(lèi)型轉(zhuǎn)換、隱式類(lèi)型轉(zhuǎn)換規(guī)則:規(guī)則:(2)當(dāng)兩個(gè)操作對(duì)象不一致時(shí),將級(jí)別低的自動(dòng)轉(zhuǎn)換成高的,當(dāng)兩個(gè)操作對(duì)象不一致時(shí),將級(jí)別低的自動(dòng)轉(zhuǎn)換成高的,然后運(yùn)算然后運(yùn)算#include iostream.hvoid main() int i=1; float f=3.3;
5、 couti+fendl; 第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)u 強(qiáng)制多態(tài)強(qiáng)制多態(tài)-類(lèi)型轉(zhuǎn)換類(lèi)型轉(zhuǎn)換2、顯式類(lèi)型轉(zhuǎn)換、顯式類(lèi)型轉(zhuǎn)換規(guī)則:規(guī)則:(1)(1)強(qiáng)制轉(zhuǎn)換法強(qiáng)制轉(zhuǎn)換法 (類(lèi)型名)表達(dá)式(類(lèi)型名)表達(dá)式 cout(float)(i+jcout(float)(i+j););(2)(2)函數(shù)法函數(shù)法 coutfloat(i+jcoutfloat(i+j););第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)u 強(qiáng)制多態(tài)強(qiáng)制多態(tài)-類(lèi)型轉(zhuǎn)換類(lèi)型轉(zhuǎn)換二二類(lèi)類(lèi)型與系統(tǒng)預(yù)定義類(lèi)類(lèi)型與系統(tǒng)預(yù)定義三種方式:構(gòu)造函數(shù)、類(lèi)型轉(zhuǎn)換函數(shù)、運(yùn)算符重載三種方式:構(gòu)造函數(shù)、類(lèi)型轉(zhuǎn)換函數(shù)、運(yùn)算符重載1、構(gòu)造函數(shù)、構(gòu)造函數(shù)規(guī)則:規(guī)則:(1)只能將參
6、數(shù)類(lèi)型向類(lèi)類(lèi)型轉(zhuǎn)換,只能將參數(shù)類(lèi)型向類(lèi)類(lèi)型轉(zhuǎn)換,反之不行反之不行#include iostream.hclass example private: int num; public: example(int);void print();example:example(int n) num=n; coutIntializing with:numendl;第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)void example:print()coutnum=numendl; void main() example X=example(3); X.print(); cout-n; example Y=6; Y.print
7、(); 第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)u 強(qiáng)制多態(tài)強(qiáng)制多態(tài)-類(lèi)型轉(zhuǎn)換類(lèi)型轉(zhuǎn)換二二類(lèi)類(lèi)型與系統(tǒng)預(yù)定義類(lèi)類(lèi)型與系統(tǒng)預(yù)定義2、類(lèi)型轉(zhuǎn)換函數(shù)、類(lèi)型轉(zhuǎn)換函數(shù)規(guī)則:規(guī)則:(1)可以將用戶自定義的類(lèi)類(lèi)型轉(zhuǎn)換成基本類(lèi)型可以將用戶自定義的類(lèi)類(lèi)型轉(zhuǎn)換成基本類(lèi)型(2) 無(wú)返回值,函數(shù)名就是轉(zhuǎn)換類(lèi)型無(wú)返回值,函數(shù)名就是轉(zhuǎn)換類(lèi)型(3) 無(wú)任何參數(shù)無(wú)任何參數(shù)定義格式:定義格式:class public: operator ( ); ;第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)#include iostream.hclass complex private: float real,imag; public: complex(float r
8、=0,float i=0) real=r;imag=i; coutConstructing.endl; operator float() /注意空格注意空格 coutTo float.endl; return real;第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)operator int() coutTo Int.endl; return int(real); void print() coutreal,imag)endl; void main() complex A(2.2,4.4); A.print(); coutfloat(A)*0.5endl; /coutA.operator float()*0.5e
9、ndl; complex B(4.4,6.6); B.print(); coutint(B)*2display(); /調(diào)用基類(lèi)的調(diào)用基類(lèi)的displayp = &g1;p-display(); /調(diào)用基類(lèi)的調(diào)用基類(lèi)的display第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)p 存在問(wèn)題存在問(wèn)題 指向基類(lèi)的指針p,不管賦給它的對(duì)象地址的不同 語(yǔ)句“p-display()調(diào)用的始終是基類(lèi)中定義的版本。p 根本原因根本原因 在派生類(lèi)中雖然繼承了基類(lèi)的成員函數(shù)display() ,但在派生類(lèi)中又定義了一個(gè)同名的display()函數(shù),而這種改變?cè)陟o態(tài)聯(lián)編的條件下編譯器并不知道。問(wèn)題問(wèn)題:那么,怎樣獲得我們那
10、么,怎樣獲得我們所希望的結(jié)果呢?所希望的結(jié)果呢?解決方案解決方案 必須通知編譯器這種可能的改變,即需要進(jìn)行動(dòng)態(tài)動(dòng)態(tài)聯(lián)編聯(lián)編。為了實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編,C+提出了虛函數(shù)虛函數(shù)的概念第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)5.2.1 虛函數(shù)和運(yùn)行時(shí)的多態(tài)性虛函數(shù)和運(yùn)行時(shí)的多態(tài)性C+語(yǔ)言中,前邊標(biāo)有關(guān)鍵字語(yǔ)言中,前邊標(biāo)有關(guān)鍵字virtual的成員函數(shù)稱為虛函的成員函數(shù)稱為虛函數(shù)數(shù)(或虛擬函數(shù)或虛擬函數(shù))。對(duì)于虛函數(shù),系統(tǒng)將按照滯后聯(lián)編的方式考。對(duì)于虛函數(shù),系統(tǒng)將按照滯后聯(lián)編的方式考慮對(duì)象的成員函數(shù)調(diào)用。慮對(duì)象的成員函數(shù)調(diào)用。聲明虛函數(shù)的語(yǔ)句格式為:聲明虛函數(shù)的語(yǔ)句格式為:virtual 返回值類(lèi)型返回值類(lèi)型 函數(shù)名函數(shù)
11、名(參數(shù)表參數(shù)表) 函數(shù)體函數(shù)體;第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)u聲明虛函數(shù)時(shí)注意事項(xiàng)聲明虛函數(shù)時(shí)注意事項(xiàng) (1) 只有在只有在類(lèi)層次類(lèi)層次中才可以設(shè)計(jì)虛函數(shù)。只有一個(gè)類(lèi)沒(méi)有中才可以設(shè)計(jì)虛函數(shù)。只有一個(gè)類(lèi)沒(méi)有設(shè)計(jì)虛函數(shù)的必要。設(shè)計(jì)虛函數(shù)的必要。 (2) 若基類(lèi)和派生類(lèi)有同名同參的成員函數(shù),基類(lèi)被虛化,若基類(lèi)和派生類(lèi)有同名同參的成員函數(shù),基類(lèi)被虛化,派生類(lèi)將自動(dòng)被虛化派生類(lèi)將自動(dòng)被虛化 (3) 派生類(lèi)中聲明的虛函數(shù)派生類(lèi)中聲明的虛函數(shù),其其成員函數(shù)名成員函數(shù)名、參數(shù)個(gè)數(shù)參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型以及返回類(lèi)型,要和基類(lèi)中參數(shù)類(lèi)型以及返回類(lèi)型,要和基類(lèi)中聲明的虛函數(shù)的函數(shù)名、聲明的虛函數(shù)的函數(shù)名、參數(shù)個(gè)數(shù)、參
12、數(shù)類(lèi)型以及返回類(lèi)型參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型以及返回類(lèi)型完全一樣完全一樣 (4) 若不滿足若不滿足(3),派生類(lèi)虛特性消失派生類(lèi)虛特性消失 (5) 基類(lèi)未虛基類(lèi)未虛,派生類(lèi)虛化,派生類(lèi)虛化,虛特性消失虛特性消失 (6) 由于使用虛函數(shù)時(shí)要由于使用虛函數(shù)時(shí)要利用賦值兼容規(guī)則利用賦值兼容規(guī)則,要求派生類(lèi),要求派生類(lèi)必須由基類(lèi)的必須由基類(lèi)的公有繼承公有繼承方式產(chǎn)生。方式產(chǎn)生。第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)u不不能聲明為虛函數(shù)能聲明為虛函數(shù)的函數(shù)的函數(shù) 靜態(tài)成員函數(shù)靜態(tài)成員函數(shù) 根據(jù)靜態(tài)函數(shù)的特性,它不屬于某一個(gè)對(duì)象,不具備多態(tài)根據(jù)靜態(tài)函數(shù)的特性,它不屬于某一個(gè)對(duì)象,不具備多態(tài)性的條件和特征。性的條件和特征。內(nèi)
13、聯(lián)成員函數(shù)內(nèi)聯(lián)成員函數(shù)因?yàn)閮?nèi)聯(lián)函數(shù)的執(zhí)行代碼是確定的,不具有多態(tài)性的特征。因?yàn)閮?nèi)聯(lián)函數(shù)的執(zhí)行代碼是確定的,不具有多態(tài)性的特征。構(gòu)造函數(shù)構(gòu)造函數(shù)不能是虛函數(shù),不能是虛函數(shù),析構(gòu)函數(shù)可以聲明為虛函數(shù)!析構(gòu)函數(shù)可以聲明為虛函數(shù)!u虛析構(gòu)函數(shù)的定義:虛析構(gòu)函數(shù)的定義:virtual 類(lèi)名類(lèi)名(); 函數(shù)體函數(shù)體第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)通過(guò)通過(guò) 對(duì)象指針對(duì)象指針 對(duì)象引用對(duì)象引用調(diào)用虛函數(shù)實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編調(diào)用虛函數(shù)實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編 u虛函數(shù)的調(diào)用虛函數(shù)的調(diào)用p 應(yīng)用虛函數(shù),可以使程序員不必過(guò)多的考慮類(lèi)的層次關(guān)系p 無(wú)須顯示的寫(xiě)出虛函數(shù)的路徑p 只需將對(duì)象指針指向相應(yīng)的派生類(lèi)或引用相應(yīng)的對(duì)象,就可以實(shí)現(xiàn)動(dòng)態(tài)聯(lián)
14、編,實(shí)現(xiàn)對(duì)消息的正確響應(yīng)。第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)Class Student private: char name20; public: virtual void display(); /利用虛函數(shù)實(shí)現(xiàn)滯后鏈編利用虛函數(shù)實(shí)現(xiàn)滯后鏈編;Class Graduate:public Student public:void display();第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)student s1(張三張三,電信電信0801);graduate g1(李四李四,電信電信0802);student *p;p = &s1;p-display(); /調(diào)用基類(lèi)的調(diào)用基類(lèi)的displayp = &
15、;g1;p-display();/調(diào)用派生類(lèi)的調(diào)用派生類(lèi)的display第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)利用虛函數(shù)實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性的設(shè)計(jì)方法是:利用虛函數(shù)實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性的設(shè)計(jì)方法是: (1) 設(shè)計(jì)一個(gè)類(lèi)層次,并在類(lèi)層次中定義一個(gè)或一個(gè)以上的虛函數(shù)。(2) 在外部程序中定義基類(lèi)的對(duì)象指針。(3) 在外部程序中,當(dāng)對(duì)象指針調(diào)用一個(gè)對(duì)象的虛函數(shù)時(shí),若此時(shí)該對(duì)象指針指向基類(lèi)對(duì)象,則系統(tǒng)就調(diào)用基類(lèi)中的相應(yīng)虛成員函數(shù);若此時(shí)基類(lèi)對(duì)象指針指向派生類(lèi)對(duì)象,則系統(tǒng)就調(diào)用派生類(lèi)中的相應(yīng)成員函數(shù)。u這樣就實(shí)現(xiàn)了運(yùn)行時(shí)的多態(tài)性!這樣就實(shí)現(xiàn)了運(yùn)行時(shí)的多態(tài)性!第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)5.2.3 虛函數(shù)和派生類(lèi)對(duì)基類(lèi)
16、成員函數(shù)覆蓋的區(qū)別虛函數(shù)和派生類(lèi)對(duì)基類(lèi)成員函數(shù)覆蓋的區(qū)別1)虛函數(shù)也像派生類(lèi)對(duì)基類(lèi)成員函數(shù)的覆蓋那樣,在派虛函數(shù)也像派生類(lèi)對(duì)基類(lèi)成員函數(shù)的覆蓋那樣,在派生類(lèi)中覆蓋了基類(lèi)的成員函數(shù),而且要求派生類(lèi)中定義虛函數(shù)生類(lèi)中覆蓋了基類(lèi)的成員函數(shù),而且要求派生類(lèi)中定義虛函數(shù)的參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型和返回類(lèi)型要與基類(lèi)中定義虛函數(shù)的參的參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型和返回類(lèi)型要與基類(lèi)中定義虛函數(shù)的參數(shù)個(gè)數(shù)、參數(shù)類(lèi)型和返回類(lèi)型完全一樣。數(shù)個(gè)數(shù)、參數(shù)類(lèi)型和返回類(lèi)型完全一樣。 2)對(duì)于派生類(lèi)對(duì)基類(lèi)成員函數(shù)的覆蓋來(lái)說(shuō),調(diào)用成員函數(shù))對(duì)于派生類(lèi)對(duì)基類(lèi)成員函數(shù)的覆蓋來(lái)說(shuō),調(diào)用成員函數(shù)的對(duì)象在程序編譯時(shí)就已確定,即要么是基類(lèi)對(duì)象,要么是派的
17、對(duì)象在程序編譯時(shí)就已確定,即要么是基類(lèi)對(duì)象,要么是派生類(lèi)對(duì)象,只能屬于固定的一種,不能在程序運(yùn)行時(shí)改變。生類(lèi)對(duì)象,只能屬于固定的一種,不能在程序運(yùn)行時(shí)改變。 第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)但對(duì)于虛函數(shù)來(lái)說(shuō),但對(duì)于虛函數(shù)來(lái)說(shuō),由于系統(tǒng)采用滯后聯(lián)編的由于系統(tǒng)采用滯后聯(lián)編的編譯方式,編譯方式,調(diào)用成員函數(shù)的對(duì)象要在程序運(yùn)行時(shí)才調(diào)用成員函數(shù)的對(duì)象要在程序運(yùn)行時(shí)才確定,要根據(jù)確定,要根據(jù)對(duì)象指針對(duì)象指針當(dāng)前指向的對(duì)象是基類(lèi)對(duì)象當(dāng)前指向的對(duì)象是基類(lèi)對(duì)象還是派生類(lèi)對(duì)象,來(lái)決定當(dāng)前調(diào)用的成員函數(shù)是基還是派生類(lèi)對(duì)象,來(lái)決定當(dāng)前調(diào)用的成員函數(shù)是基類(lèi)的成員函數(shù),還是派生類(lèi)的成員函數(shù)。類(lèi)的成員函數(shù),還是派生類(lèi)的成員函數(shù)
18、。 如果對(duì)象指針當(dāng)前指向的是基類(lèi)對(duì)象,則調(diào)用如果對(duì)象指針當(dāng)前指向的是基類(lèi)對(duì)象,則調(diào)用基類(lèi)的成員函數(shù);如果對(duì)象指針當(dāng)前指向的是派生基類(lèi)的成員函數(shù);如果對(duì)象指針當(dāng)前指向的是派生類(lèi)對(duì)象,則調(diào)用派生類(lèi)的成員函數(shù)。類(lèi)對(duì)象,則調(diào)用派生類(lèi)的成員函數(shù)。第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)編程實(shí)例編程實(shí)例1 大學(xué)人員問(wèn)題。大學(xué)人員問(wèn)題。設(shè)計(jì)要求:大學(xué)人員分為兩類(lèi),一類(lèi)是教學(xué)人員,設(shè)計(jì)要求:大學(xué)人員分為兩類(lèi),一類(lèi)是教學(xué)人員,另一類(lèi)是行政人員,這兩類(lèi)人員的信息管理系統(tǒng)中,另一類(lèi)是行政人員,這兩類(lèi)人員的信息管理系統(tǒng)中,一部分信息內(nèi)容是相同的,但另一部分信息內(nèi)容是不一部分信息內(nèi)容是相同的,但另一部分信息內(nèi)容是不相同的。設(shè)教學(xué)人
19、員的信息包括姓名、年齡和專(zhuān)業(yè)編相同的。設(shè)教學(xué)人員的信息包括姓名、年齡和專(zhuān)業(yè)編號(hào),行政人員的信息包括姓名、年齡和業(yè)績(jī)?cè)u(píng)級(jí)。號(hào),行政人員的信息包括姓名、年齡和業(yè)績(jī)?cè)u(píng)級(jí)。 現(xiàn)要求定義一個(gè)對(duì)象數(shù)組能保存現(xiàn)要求定義一個(gè)對(duì)象數(shù)組能保存3個(gè)學(xué)校教學(xué)人員個(gè)學(xué)校教學(xué)人員和和2個(gè)行政人員的實(shí)例對(duì)象,并打印出各自信息,并個(gè)行政人員的實(shí)例對(duì)象,并打印出各自信息,并設(shè)計(jì)一個(gè)測(cè)試程序進(jìn)行測(cè)試。設(shè)計(jì)一個(gè)測(cè)試程序進(jìn)行測(cè)試。第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)5.3 純虛函數(shù)與抽象類(lèi)純虛函數(shù)與抽象類(lèi)在一個(gè)圖形系統(tǒng)中,有一個(gè)一般的閉合圖形類(lèi)CClosedFigureCClosedFigureCPolygonCCircleCRectang
20、leCTriangle問(wèn)題:由于不知道問(wèn)題:由于不知道CClosedFigure的數(shù)據(jù)如何表現(xiàn),的數(shù)據(jù)如何表現(xiàn),故它的故它的Perimeter、Area和和Draw函數(shù)無(wú)法實(shí)現(xiàn)?函數(shù)無(wú)法實(shí)現(xiàn)?第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)5.3.1 純虛函數(shù)純虛函數(shù)在基類(lèi)中不對(duì)虛函數(shù)給出有意義的實(shí)現(xiàn)在基類(lèi)中不對(duì)虛函數(shù)給出有意義的實(shí)現(xiàn),它只是在派它只是在派生類(lèi)中有具體的意義。這時(shí)基類(lèi)中的虛函數(shù)只是一個(gè)生類(lèi)中有具體的意義。這時(shí)基類(lèi)中的虛函數(shù)只是一個(gè)入口,具體的目的地由不同的派生類(lèi)中的對(duì)象決定。入口,具體的目的地由不同的派生類(lèi)中的對(duì)象決定。這個(gè)虛函數(shù)稱為這個(gè)虛函數(shù)稱為純虛函數(shù)純虛函數(shù)。class virtual ()
21、=0;.;第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)5.3.2 抽象類(lèi)抽象類(lèi)p定義定義 至少包含一個(gè)純虛函數(shù)的類(lèi),稱為抽象類(lèi)。至少包含一個(gè)純虛函數(shù)的類(lèi),稱為抽象類(lèi)。p 作用作用抽象類(lèi)作為派生類(lèi)組抽象類(lèi)作為派生類(lèi)組統(tǒng)一的根統(tǒng)一的根,組成一個(gè)類(lèi)層次組成一個(gè)類(lèi)層次。純虛函。純虛函數(shù)為該類(lèi)層次提化供數(shù)為該類(lèi)層次提化供統(tǒng)一接口統(tǒng)一接口。派生類(lèi)可以具體化這些虛派生類(lèi)可以具體化這些虛函數(shù)的操作行為,完成各個(gè)類(lèi)特有的屬性函數(shù)的操作行為,完成各個(gè)類(lèi)特有的屬性p 抽象類(lèi)不能初始化具體對(duì)象,但可以定義指針變量抽象類(lèi)不能初始化具體對(duì)象,但可以定義指針變量必須在派生類(lèi)中必須在派生類(lèi)中重載純虛函數(shù)重載純虛函數(shù),否則會(huì)產(chǎn)生程序的運(yùn)行錯(cuò),
22、否則會(huì)產(chǎn)生程序的運(yùn)行錯(cuò)誤!誤!第5章運(yùn)行時(shí)的多態(tài)性和抽象類(lèi)class Aprotected:int x;public:A()x =1000; virtual void print()=0; /定義純虛函數(shù)定義純虛函數(shù);class B:public A /派生類(lèi)派生類(lèi)private: int y;public:B() y=2000;void print()cout “y=”yn;/重新定義純虛函數(shù)重新定義純虛函數(shù);class C:public A /派生類(lèi)派生類(lèi)int z;public:C()z=3000;void print()cout “z=”zprint();pa=&c; pa-print(); A a; pa=&a; pa-print( );y=2000z=3000抽象類(lèi)抽象類(lèi)不能定義抽象類(lèi)的對(duì)象不能定義抽象類(lèi)的對(duì)象第5章運(yùn)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)升級(jí)項(xiàng)目合同借款協(xié)議
- 合同管理培訓(xùn)與人才培養(yǎng)的建議
- 餐飲業(yè)原料采購(gòu)合同(安全食品專(zhuān)用)
- 勞動(dòng)合同范本:外來(lái)專(zhuān)業(yè)技術(shù)人才
- 商業(yè)地皮交易合同書(shū)
- 蘇州市模范勞動(dòng)合同樣本
- 四人合作創(chuàng)業(yè)股份分配合同范本
- 年度合作合同:速記服務(wù)條款
- 液化氣采購(gòu)框架合同
- 購(gòu)物中心投資合同樣本
- 2025年上海浦東新區(qū)高三一模高考英語(yǔ)試卷試題(含答案詳解)
- 2025-2030全球嬰兒磨牙用品行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 上海市發(fā)展改革研究院工作人員招考聘用12人高頻重點(diǎn)提升(共500題)附帶答案詳解
- CRM系統(tǒng)應(yīng)用培訓(xùn)
- 《招標(biāo)投標(biāo)法》考試題庫(kù)200題(含答案)
- 【課件】高等學(xué)??茖W(xué)技術(shù)學(xué)術(shù)規(guī)范指南 (宣講稿)
- 中建建筑電氣工程施工方案
- 復(fù)變函數(shù)論 鐘玉泉 第四版 課后習(xí)題答案詳解解析
- 《輕鋼建筑》課件
- 尿源性膿毒血癥護(hù)理
- 2024解析:第十一章 功和機(jī)械能-講核心(解析版)
評(píng)論
0/150
提交評(píng)論