版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)自動(dòng)加款機(jī)市場(chǎng)調(diào)查研究報(bào)告
- 2025年商丘職業(yè)技術(shù)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年唐山科技職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2025年廈門(mén)海洋職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2025年全球及中國(guó)醒腦靜注射液行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)APP安全評(píng)估行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)氯消毒劑片行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025至2030年中國(guó)霸靈化痰口服液數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 二零二五版藥店連鎖加盟店員培訓(xùn)與聘用合同4篇
- 2025至2030年中國(guó)水油相溶解鍋數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年溫州市城發(fā)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2025年中小學(xué)春節(jié)安全教育主題班會(huì)課件
- 2025版高考物理復(fù)習(xí)知識(shí)清單
- 除數(shù)是兩位數(shù)的除法練習(xí)題(84道)
- 2025年度安全檢查計(jì)劃
- 2024年度工作總結(jié)與計(jì)劃標(biāo)準(zhǔn)版本(2篇)
- 全球半導(dǎo)體測(cè)試探針行業(yè)市場(chǎng)研究報(bào)告2024
- 反走私課件完整版本
- 畢業(yè)論文-山東省農(nóng)產(chǎn)品出口貿(mào)易的現(xiàn)狀及對(duì)策研究
- 音樂(lè)思政課特色課程設(shè)計(jì)
- 2023年四川省樂(lè)山市中考數(shù)學(xué)試卷
評(píng)論
0/150
提交評(píng)論