繼承多態(tài)信息工程學(xué)院計(jì)算機(jī)技術(shù)教研室_第1頁(yè)
繼承多態(tài)信息工程學(xué)院計(jì)算機(jī)技術(shù)教研室_第2頁(yè)
繼承多態(tài)信息工程學(xué)院計(jì)算機(jī)技術(shù)教研室_第3頁(yè)
繼承多態(tài)信息工程學(xué)院計(jì)算機(jī)技術(shù)教研室_第4頁(yè)
繼承多態(tài)信息工程學(xué)院計(jì)算機(jī)技術(shù)教研室_第5頁(yè)
已閱讀5頁(yè),還剩98頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、概述 多態(tài)性(Polymorphism)是指一個(gè)名字,多種語(yǔ)義;或界面 相同,多種實(shí)現(xiàn)。即當(dāng)發(fā)出同樣的消息被不同類型的對(duì)象接 收時(shí),導(dǎo)致完全不同的行為。 多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征之一。 多態(tài)的實(shí)現(xiàn):函數(shù)重載運(yùn)算符重載虛函數(shù)聯(lián)編是指一個(gè)程序模塊、代碼之間互相關(guān)聯(lián)的過(guò)程。 靜態(tài)聯(lián)編(Static Binding):是指程序的匹配、連接在編譯階段,即程序運(yùn)行之前完成,也稱為早期匹配。重載函數(shù)使用靜態(tài)聯(lián)編。 動(dòng)態(tài)聯(lián)編(Dynamic Binding) :是指程序聯(lián)編推遲到運(yùn)行時(shí)進(jìn)行,所以又稱為晚期聯(lián)編。繼承和虛函數(shù)使用的是動(dòng)態(tài)聯(lián)編。8.6 聯(lián)編(Binding)普通成員函數(shù)重載可表達(dá)為兩種形

2、式:1. 在一個(gè)類說(shuō)明中重載例如:Show ( int , char ) ;Show ( char * , float ) ;8.7 靜態(tài)聯(lián)編普通成員函數(shù)重載可表達(dá)為兩種形式:1. 在一個(gè)類說(shuō)明中重載例如:Show ( int , char ); 與Show ( char * , float ); 不是同一函數(shù),編譯能夠區(qū)分2. 基類的成員函數(shù)在派生類重載。有 3 種編譯區(qū)分方法:(1)根據(jù)參數(shù)的特征加以區(qū)分8.7 靜態(tài)聯(lián)編普通成員函數(shù)重載可表達(dá)為兩種形式:1. 在一個(gè)類說(shuō)明中重載2. 基類的成員函數(shù)在派生類重載。有 3 種編譯區(qū)分方法:(1)根據(jù)參數(shù)的特征加以區(qū)分例如:A : Show (

3、);有別于B : Show ( );(2)使用“ : ”加以區(qū)分8.7 靜態(tài)聯(lián)編普通成員函數(shù)重載可表達(dá)為兩種形式:1. 在一個(gè)類說(shuō)明中重載2. 基類的成員函數(shù)在派生類重載。有 3 種編譯區(qū)分方法:(1)根據(jù)參數(shù)的特征加以區(qū)分(2)使用“ : ”加以區(qū)分例如:Aobj . Show ( )調(diào)用A : Show ( )Bobj . Show ( )調(diào)用B : Show ( )(3)根據(jù)類對(duì)象加以區(qū)分8.7 靜態(tài)聯(lián)編 冠以關(guān)鍵字 virtual 的成員函數(shù)稱為虛函數(shù) 實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)的關(guān)鍵首先是要說(shuō)明虛函數(shù),另外,必須 用基類指針調(diào)用派生類的不同實(shí)現(xiàn)版本8.8 虛函數(shù)和動(dòng)態(tài)聯(lián)編 基類指針雖然獲取派生類

4、對(duì)象地址,卻只能訪問(wèn)派生類從基類繼承的成員8.8.1 虛函數(shù)和基類指針#includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d

5、 : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針#includeclass Base public : Base(

6、char xx) x = xx; void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : F

7、irst_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_obj#includeclass Base public : Base(char xx) x = xx; void who() cout Base class:

8、 x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Sec

9、ond derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp定義基類指針#includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: char x; ;class Firs

10、t_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ;

11、p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp#includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx,

12、 char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - w

13、ho() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp#includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout

14、First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) -

15、 who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp#includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: c

16、har y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_

17、objF_objS_objp#includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d pub

18、lic : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp#includeclass Base public : B

19、ase(char xx) x = xx; void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz )

20、 : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp#includeclass Base public : Base(char xx) x = xx; void who() cout Base c

21、lass: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cou

22、t Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp#includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: char x; ;class First

23、_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p

24、 = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objpvoid who() cout First derived class: x , y n ; #includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: char x; ;class F

25、irst_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who()

26、 ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objpvoid who() cout First derived class: x , y n ; 通過(guò)對(duì)象調(diào)用成員函數(shù)#includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ch

27、ar x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x

28、 , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objpvoid who() cout Second derived class: x , y , z n ; #includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; prot

29、ected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived

30、 class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objpvoid who() cout Second derived class: x , y , z n ; 基類指針做類型轉(zhuǎn)換#includeclass Base public : Base(char xx) x = xx; void who() cout Base

31、 class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() c

32、out Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp通過(guò)基類指針只能訪問(wèn)從基類繼承的成員 #includeclass Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected:

33、 char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class

34、: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp修改程序定義虛函數(shù)#includeclass Base public : Base(char xx) x = xx; virtual void who() cout Base class: x n ; protected: char x; ;class First_d :

35、public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F

36、_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針基類定義虛函數(shù)#includeclass Base public : Base(char xx) x = xx; virtual void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(x

37、x) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who

38、() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針派生類的重定義版本默認(rèn)為虛函數(shù)#includeclass Base public : Base(char xx) x = xx; virtual void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived clas

39、s: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng)

40、8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_obj#includeclass Base public : Base(char xx) x = xx; virtual void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;cla

41、ss Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_o

42、bjp#includeclass Base public : Base(char xx) x = xx; virtual void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public

43、 : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp#includeclass Base public : Base

44、(char xx) x = xx; virtual void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char

45、 zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp#includeclass Base public : Base(char xx) x = xx; virtual void who(

46、) cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; v

47、oid who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objpvoid who() cout First derived class: x , y n ; #includeclass Base public : Base(char xx) x = xx; virtu

48、al void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy

49、 ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objvoid who() cout First derived class: x , y n ; p#includeclass Base public : Base(char xx) x

50、 = xx; virtual void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : Fir

51、st_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp#includeclass Base public : Base(char xx) x = xx; virtual void who() cout Base

52、 class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() c

53、out Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objpvoid who() coutSecond derived class: x, y, zn ; #includeclass Base public : Base(char xx) x = xx; virtual void wh

54、o() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz;

55、 void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objvoid who() coutSecond derived class: x, y, zn ; p#includeclass Base public : Base(char xx) x = xx; vi

56、rtual void who() cout Base class: x n ; protected: char x; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: char y; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx,

57、 yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;演示基類指針的移動(dòng) 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp由于who()的虛特性隨著p指向不同對(duì)象,執(zhí)行不同實(shí)現(xiàn)版本 注意: 一個(gè)虛函數(shù),在派生類層界面相同的重載函數(shù)都保持虛特性 虛函數(shù)必須是類的成員函數(shù),不能是全局函數(shù)和靜態(tài)函數(shù)

58、不能將友元說(shuō)明為虛函數(shù),但虛函數(shù)可以是另一個(gè)類的友元 析構(gòu)函數(shù)可以是虛函數(shù),但構(gòu)造函數(shù)不能是虛函數(shù) 動(dòng)態(tài)聯(lián)編只能通過(guò)指針或引用來(lái)操作虛函數(shù),如果采用其他標(biāo)識(shí)對(duì)象來(lái)操作虛函數(shù),將采用靜態(tài)聯(lián)編方式調(diào)用虛函數(shù)。8.8.1 虛函數(shù)和基類指針 在派生類中重載基類的虛函數(shù)要求函數(shù)名、返回類型、參數(shù) 個(gè)數(shù)、參數(shù)類型和順序完全相同 如果僅僅返回類型不同,C+認(rèn)為是錯(cuò)誤重載 如果函數(shù)原型不同,僅函數(shù)名相同,丟失虛特性 8.8.2 虛函數(shù)的重載特性void g ( ) derived d ; base * bp = & d ; / 基類指針指向派生類對(duì)象 bp - vf1 ( ) ; / 調(diào)用 derived :

59、 vf1 ( ) bp - vf2 ( ) ; / 調(diào)用 base : vf2 ( ) bp - f ( ) ; / 調(diào)用 base : f ( ) ; 例:class base public : virtual void vf1 ( ) ; virtual void vf2 ( ) ; virtual void vf3 ( ) ; void f ( ) ; ;class derived : public base public : void vf1 ( ) ;/ 虛函數(shù) void vf2 ( int ) ;/ 重載,參數(shù)不同,虛特性丟失 char vf3 ( ) ;/ error,僅返回類型

60、不同 void f ( ) ;/ 非虛函數(shù)重載 ;8.8.2 虛函數(shù)的重載特性 構(gòu)造函數(shù)不能是虛函數(shù)。建立一個(gè)派生類對(duì)象時(shí),必須從類 層次的根開(kāi)始,沿著繼承路徑逐個(gè)調(diào)用基類的構(gòu)造函數(shù) 析構(gòu)函數(shù)可以是虛的。虛析構(gòu)函數(shù)用于指引 delete 運(yùn)算符正 確析構(gòu)動(dòng)態(tài)對(duì)象 8.8.3 虛析構(gòu)函數(shù)#includeclass A public: A() cout A:A() is called.n ; ;class B : public A public: B() cout B:B() is called.n ; ;void main() A *Ap = new B ; B *Bp2 = new B ; c

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論