![繼承多態(tài)信息工程學(xué)院計(jì)算機(jī)技術(shù)教研室_第1頁](http://file4.renrendoc.com/view/5e3c03db29f65ba65cb66f1c1ed1998d/5e3c03db29f65ba65cb66f1c1ed1998d1.gif)
![繼承多態(tài)信息工程學(xué)院計(jì)算機(jī)技術(shù)教研室_第2頁](http://file4.renrendoc.com/view/5e3c03db29f65ba65cb66f1c1ed1998d/5e3c03db29f65ba65cb66f1c1ed1998d2.gif)
![繼承多態(tài)信息工程學(xué)院計(jì)算機(jī)技術(shù)教研室_第3頁](http://file4.renrendoc.com/view/5e3c03db29f65ba65cb66f1c1ed1998d/5e3c03db29f65ba65cb66f1c1ed1998d3.gif)
![繼承多態(tài)信息工程學(xué)院計(jì)算機(jī)技術(shù)教研室_第4頁](http://file4.renrendoc.com/view/5e3c03db29f65ba65cb66f1c1ed1998d/5e3c03db29f65ba65cb66f1c1ed1998d4.gif)
![繼承多態(tài)信息工程學(xué)院計(jì)算機(jī)技術(shù)教研室_第5頁](http://file4.renrendoc.com/view/5e3c03db29f65ba65cb66f1c1ed1998d/5e3c03db29f65ba65cb66f1c1ed1998d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、概述 多態(tài)性(Polymorphism)是指一個名字,多種語義;或界面 相同,多種實(shí)現(xiàn)。即當(dāng)發(fā)出同樣的消息被不同類型的對象接 收時,導(dǎo)致完全不同的行為。 多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征之一。 多態(tài)的實(shí)現(xiàn):函數(shù)重載運(yùn)算符重載虛函數(shù)聯(lián)編是指一個程序模塊、代碼之間互相關(guān)聯(lián)的過程。 靜態(tài)聯(lián)編(Static Binding):是指程序的匹配、連接在編譯階段,即程序運(yùn)行之前完成,也稱為早期匹配。重載函數(shù)使用靜態(tài)聯(lián)編。 動態(tài)聯(lián)編(Dynamic Binding) :是指程序聯(lián)編推遲到運(yùn)行時進(jìn)行,所以又稱為晚期聯(lián)編。繼承和虛函數(shù)使用的是動態(tài)聯(lián)編。8.6 聯(lián)編(Binding)普通成員函數(shù)重載可表達(dá)為兩種形
2、式:1. 在一個類說明中重載例如:Show ( int , char ) ;Show ( char * , float ) ;8.7 靜態(tài)聯(lián)編普通成員函數(shù)重載可表達(dá)為兩種形式:1. 在一個類說明中重載例如: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. 在一個類說明中重載2. 基類的成員函數(shù)在派生類重載。有 3 種編譯區(qū)分方法:(1)根據(jù)參數(shù)的特征加以區(qū)分例如:A : Show (
3、);有別于B : Show ( );(2)使用“ : ”加以區(qū)分8.7 靜態(tài)聯(lián)編普通成員函數(shù)重載可表達(dá)為兩種形式:1. 在一個類說明中重載2. 基類的成員函數(shù)在派生類重載。有 3 種編譯區(qū)分方法:(1)根據(jù)參數(shù)的特征加以區(qū)分(2)使用“ : ”加以區(qū)分例如:Aobj . Show ( )調(diào)用A : Show ( )Bobj . Show ( )調(diào)用B : Show ( )(3)根據(jù)類對象加以區(qū)分8.7 靜態(tài)聯(lián)編 冠以關(guān)鍵字 virtual 的成員函數(shù)稱為虛函數(shù) 實(shí)現(xiàn)運(yùn)行時多態(tài)的關(guān)鍵首先是要說明虛函數(shù),另外,必須 用基類指針調(diào)用派生類的不同實(shí)現(xiàn)版本8.8 虛函數(shù)和動態(tài)聯(lián)編 基類指針雖然獲取派生類
4、對象地址,卻只能訪問派生類從基類繼承的成員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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objpvoid who() cout First derived class: x , y n ; 通過對象調(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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp通過基類指針只能訪問從基類繼承的成員 #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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動
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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 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() ;演示基類指針的移動 8.8.1 虛函數(shù)和基類指針ATOENDxyzB_objF_objS_objp由于who()的虛特性隨著p指向不同對象,執(zhí)行不同實(shí)現(xiàn)版本 注意: 一個虛函數(shù),在派生類層界面相同的重載函數(shù)都保持虛特性 虛函數(shù)必須是類的成員函數(shù),不能是全局函數(shù)和靜態(tài)函數(shù)
58、不能將友元說明為虛函數(shù),但虛函數(shù)可以是另一個類的友元 析構(gòu)函數(shù)可以是虛函數(shù),但構(gòu)造函數(shù)不能是虛函數(shù) 動態(tài)聯(lián)編只能通過指針或引用來操作虛函數(shù),如果采用其他標(biāo)識對象來操作虛函數(shù),將采用靜態(tài)聯(lián)編方式調(diào)用虛函數(shù)。8.8.1 虛函數(shù)和基類指針 在派生類中重載基類的虛函數(shù)要求函數(shù)名、返回類型、參數(shù) 個數(shù)、參數(shù)類型和順序完全相同 如果僅僅返回類型不同,C+認(rèn)為是錯誤重載 如果函數(shù)原型不同,僅函數(shù)名相同,丟失虛特性 8.8.2 虛函數(shù)的重載特性void g ( ) derived d ; base * bp = & d ; / 基類指針指向派生類對象 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ù)。建立一個派生類對象時,必須從類 層次的根開始,沿著繼承路徑逐個調(diào)用基類的構(gòu)造函數(shù) 析構(gòu)函數(shù)可以是虛的。虛析構(gòu)函數(shù)用于指引 delete 運(yùn)算符正 確析構(gòu)動態(tài)對象 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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度工程招投標(biāo)代理服務(wù)承包合同
- 2025年度建筑工程質(zhì)量安全管理招投標(biāo)合同執(zhí)行標(biāo)準(zhǔn)
- 2025年度智慧交通系統(tǒng)工程勞務(wù)分包合同
- 2025年度交通擁堵預(yù)測與解決方案服務(wù)合同
- 2025年度光伏發(fā)電站電氣給排水設(shè)備安裝及維護(hù)合同
- 2025年度地下綜合管溝開挖回填工程監(jiān)理服務(wù)合同
- 2025年度生物科技研發(fā)借款保證金合同
- 2025年度國際貨運(yùn)代理服務(wù)簡單國際貿(mào)易合同
- 2025年度綠色建筑能耗監(jiān)測勘察設(shè)計(jì)施工勞務(wù)分包合同(能源管理)
- 2025年度個人養(yǎng)老護(hù)理借款及服務(wù)協(xié)議合同
- 2024年國家電網(wǎng)招聘之通信類題庫附參考答案(考試直接用)
- CJJ 169-2012城鎮(zhèn)道路路面設(shè)計(jì)規(guī)范
- 食品企業(yè)日管控周排查月調(diào)度記錄及其報告格式參考
- 產(chǎn)品質(zhì)量法解讀課件1
- 第八單元金屬和金屬材料單元復(fù)習(xí)題-2023-2024學(xué)年九年級化學(xué)人教版下冊
- 倉庫搬遷及改進(jìn)方案課件
- 精神科護(hù)理技能5.3出走行為的防范與護(hù)理
- 采購管理學(xué)教學(xué)課件
- 《供應(yīng)商質(zhì)量會議》課件
- 江蘇省科技企業(yè)孵化器孵化能力評價研究的中期報告
- 畢業(yè)論文-山東省農(nóng)產(chǎn)品出口貿(mào)易的現(xiàn)狀及對策研究
評論
0/150
提交評論