版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第12章多態(tài)12.1 基類派生類對(duì)象賦值12.2 虛函數(shù)12.3 純虛函數(shù)12.4 虛析構(gòu)函數(shù)12.5 本章小結(jié)111不同類型的數(shù)據(jù)之間可以隱含實(shí)現(xiàn)自動(dòng)轉(zhuǎn)換和賦值,這種現(xiàn)象稱為類型的賦值兼容(見(jiàn)2.3.7)。對(duì)于基類和派生類兩者之間,也存在從派生類對(duì)象向基類對(duì)象的自動(dòng)轉(zhuǎn)換。不過(guò)這需要滿足一定的前提條件:公共繼承。從繼承方式可以看出,只有公共(public)繼承時(shí),基類的所有成員可以在派生類中保持訪問(wèn)屬性不變。而當(dāng)派生類對(duì)象賦值給基類對(duì)象時(shí),相當(dāng)于創(chuàng)建了一個(gè)擁有完整派生類成員數(shù)據(jù)子集的完整基類對(duì)象。而若將基類對(duì)象直接賦給派生類對(duì)象是行不通的,因?yàn)榕缮悓?duì)象中還有許多額外增加的成員數(shù)據(jù),這些數(shù)據(jù)的值并不能在賦值時(shí)確定值。12.1基類派生類對(duì)象賦值22(3)派生類對(duì)象地址可以賦給基類對(duì)象指針(2)派生類對(duì)象可以初始化基類對(duì)象引用。(4)參數(shù)為基類對(duì)象時(shí),均可以按照(1)(2)(3)的原則用派生類對(duì)象傳入。(1)派生類對(duì)象可以賦給基類對(duì)象。301#include<iostream>02usingnamespacestd;0304classPoint05{06private:07intx;08inty;09public:10Point(intx,inty)11{12this->x=x;13this->y=y;14}15voidshow()16{17cout<<"Point:("<<x<<","<<y<<")"<<endl;18}19};21classCircle:publicPoint22{23private:24intr;25public:26Circle(intx,inty,intr):Point(x,y)27{28this->r=r;29}30Circle(Circle&c):Point(c)31{32r=c.r;33}34voidshow()35{36cout<<"Circle:"<<r<<endl;37}38};39例12.1基類派生類對(duì)象賦值兼容示例440intmain()41{42Circlec1(2,3,10);43c1.show();44Circlec2(c1);45c2.show();46Pointp(0,0);47p=c1;48p.show();49Point*pp=&c1;50pp->show();51Point&rp=c1;52rp.show();53return0;54}例12.1基類派生類對(duì)象賦值兼容示例5虛函數(shù)技術(shù)是C++中用于實(shí)現(xiàn)動(dòng)態(tài)多態(tài)的技術(shù)。在基類的成員函數(shù)定義之前加上virtual關(guān)鍵字,則該函數(shù)就成為了一個(gè)虛函數(shù)。當(dāng)定義了一個(gè)虛函數(shù)后,在派生類中可以重定義此函數(shù)(定義一個(gè)和此函數(shù)同名、同參、同返回值的成員函數(shù)),程序運(yùn)行過(guò)程中,可以通過(guò)基類的指針或引用來(lái)指向某個(gè)派生類對(duì)象,在運(yùn)行時(shí),系統(tǒng)將會(huì)自動(dòng)調(diào)用相應(yīng)派生類的成員函數(shù),這就實(shí)現(xiàn)了運(yùn)行時(shí)候的多態(tài)。12.2虛函數(shù)66例12.2虛函數(shù)使用示例01#include<iostream>02usingnamespacestd;0304classShape05{06public:07voidshow()08{09cout<<"Shape"<<endl;10}11virtualvoidarea()12{13cout<<"area=0"<<endl;14}15};
7717classCircle:publicShape18{19private:20constdoublePI=3.14159;21intr;22public:23Circle(intr)24{25this->r=r;26}27voidshow()28{29cout<<"Circle"<<endl;30}31voidarea()32{33cout<<"area="<<PI*r*r<<endl;34}35};
37classSquare:publicShape38{39private:40intlength;41public:42Square(intlength)43{44this->length=length;45}46voidshow()47{48cout<<"Square"<<endl;49}50voidarea()51{52cout<<"area="<<length*length<<endl;53}54};5556intmain()57{58Circlec(5);59Squares(10);60//派生類對(duì)象方法調(diào)用61c.show();62c.area();63s.show();64s.area();65//將派生類對(duì)象賦給基類對(duì)象66Shapeobj=c;67obj.show();68obj.area();69obj=s;70obj.show();71obj.area();8872//將派生類對(duì)象地址賦給基類對(duì)象指針73Shape*pobj=&c;74pobj->show();75pobj->area();76pobj=&s;77pobj->show();78pobj->area();79//將派生類對(duì)象初始化基類對(duì)象引用80Shape&rc=c;81rc.show();82rc.area();83Shape&rs=s;84rs.show();85rs.area();86return0;87}12.3純虛函數(shù)virtual函數(shù)類型函數(shù)名(參數(shù)列表)[const]=0;至少包含一個(gè)純虛函數(shù)的類稱為抽象類,這種類不能直接創(chuàng)建對(duì)象。99例12.3抽象類示例01#include<iostream>02usingnamespacestd;0304classShape05{06public:07voidshow()08{09cout<<"Shape"<<endl;10}11virtualvoidarea()const=0;12};1314classCircle:publicShape15{16private:17constdoublePI=3.14159;18intr;101019public:20Circle(intr)21{22this->r=r;23}24voidshow()25{26cout<<"Circle"<<endl;27}28voidarea()const29{30cout<<"area="<<PI*r*r<<endl;31}32};3334classSquare:publicShape35{36private:37intlength;38public:39Square(intlength)40{41this->length=length;42}43voidshow()44{45cout<<"Square"<<endl;46}47voidarea()const48{49
cout<<"area="<<length*length<<endl;50}51};111153intmain()54{55Circlec(5);56Squares(10);57//將派生類對(duì)象地址賦給基類對(duì)象指針58Shape*pobj=&c;59pobj->show();60pobj->area();61pobj=&s;62pobj->show();63pobj->area();64//將派生類對(duì)象初始化基類對(duì)象引用65Shape&rc=c;66rc.show();67rc.area();68Shape&rs=s;69rs.show();70rs.area();71return0;72}12.4虛析構(gòu)函數(shù)析構(gòu)函數(shù)可以在對(duì)象被從內(nèi)存釋放之前做一些必要的輔助工作。派生類對(duì)象在被釋放時(shí)會(huì)首先調(diào)用自身的構(gòu)造函數(shù),然后再調(diào)用基類的析構(gòu)函數(shù),這和構(gòu)造函數(shù)調(diào)用的順序相反。將基類的析構(gòu)函數(shù)定義成虛擬(virtual)類型,這樣在使用delete釋放基類對(duì)象指針?biāo)赶騼?nèi)存空間(實(shí)際上指向派生類對(duì)象)時(shí),可以同時(shí)調(diào)用派生類析構(gòu)函數(shù)和基類析構(gòu)函數(shù),這樣可以避免內(nèi)存泄露。1212例12.4虛析構(gòu)函數(shù)示例1301#include<iostream>02usingnamespacestd;0304classShape05{06public:07~Shape()08{09cout<<"DestructorShape"<<endl;10}11};1213classCircle:publicShape14{15public:16~Circle()17{18cout<<"DestructorCircle"<<endl;19}2021};1323classPoint24{25public:26virtual~Point()27{28cout<<"DestructorPoint"<<endl;29};30};3132classLine:public
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 土建大棚銷售合同范本
- 影視 招商策劃合同范本
- 對(duì)賬付款合同范本
- 機(jī)器大修合同范本
- 機(jī)械代賣合同范本
- 布草代購(gòu)合同協(xié)議
- 村道合同轉(zhuǎn)讓協(xié)議
- 楊樹(shù)買賣合同協(xié)議
- 林地審批合同范本
- 樓道粉刷合同協(xié)議
- 醫(yī)療健康大數(shù)據(jù)的精準(zhǔn)營(yíng)養(yǎng)方案
- 幼兒園中班交通安全教育課件
- 食堂衛(wèi)生檢查與考核標(biāo)準(zhǔn)建立
- 2025 年國(guó)家層面數(shù)據(jù)資產(chǎn)政策匯編(全景解讀版)
- 2025新疆交通投資(集團(tuán))有限責(zé)任公司所屬公司招聘26人筆試歷年典型考點(diǎn)題庫(kù)附帶答案詳解2套試卷
- 2025年成本會(huì)計(jì)考試題及答案6
- 全域土地綜合整治項(xiàng)目社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2024-2025學(xué)年廣東省深圳市福田區(qū)七年級(jí)(上)期末英語(yǔ)試卷
- 《證券投資學(xué)》吳曉求課后習(xí)題答案
- 消防員心理測(cè)試題目及答案大全2025
- 住院醫(yī)師規(guī)范化培訓(xùn)急診科模擬試題及答案
評(píng)論
0/150
提交評(píng)論