C++ 第十九講-多態(tài)性與虛函數(shù)_第1頁(yè)
C++ 第十九講-多態(tài)性與虛函數(shù)_第2頁(yè)
C++ 第十九講-多態(tài)性與虛函數(shù)_第3頁(yè)
C++ 第十九講-多態(tài)性與虛函數(shù)_第4頁(yè)
C++ 第十九講-多態(tài)性與虛函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩38頁(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)介

《C++語(yǔ)言及編程技巧》主講:匡綱要國(guó)防科技大學(xué)電子科學(xué)與工程學(xué)院·湖南長(zhǎng)沙·-1第19講

多態(tài)性與虛函數(shù)-2第20講多態(tài)性與虛函數(shù)

C++的多態(tài)性11.1指向基類的指針和指向派生類的指針

11.2使用基類指針引用派生類對(duì)象時(shí)同名成員函數(shù)的處理

11.3靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編

11.4virtual成員函數(shù)---虛函數(shù)

11.5純虛函數(shù)與抽象基類

11.6虛成員函數(shù)表

11.7虛析構(gòu)函數(shù)-3C++多態(tài)性polymorphism,“manyforms”:即多種形態(tài)在自然語(yǔ)言中,多態(tài)性即是“一詞多義”;更準(zhǔn)確地說(shuō),多態(tài)性是指相同的動(dòng)詞作用到不同類型的對(duì)象上,例如:

駕駛摩托車(chē)

駕駛汽車(chē)

駕駛飛機(jī)

駕駛輪船

駕駛宇宙飛船-4

當(dāng)不同對(duì)象接受到相同的消息產(chǎn)生不同的動(dòng)作,這種性質(zhì)稱為多態(tài)性。通俗地說(shuō),多態(tài)性是指用一個(gè)名字定義不同的函數(shù),這些函數(shù)執(zhí)行不同但又類似的操作,即用同樣的接口訪問(wèn)功能不同的函數(shù),從而實(shí)現(xiàn)“一個(gè)接口,多種方法”。在C語(yǔ)言中,由于不支持多態(tài),求絕對(duì)值的動(dòng)作要求三個(gè)不同的函數(shù)名字:

abs(),labs(),fabs()分別用來(lái)求整數(shù),長(zhǎng)整數(shù)、浮點(diǎn)數(shù)的絕對(duì)值。在C++語(yǔ)言中,由于支持多態(tài),求絕對(duì)值的動(dòng)作可以只用一個(gè)函數(shù)名:abs()C++多態(tài)性-5多態(tài)應(yīng)用于OOP的目的是允許用一個(gè)名字來(lái)指定動(dòng)作的一般類(即邏輯上相似的動(dòng)作)。從而帶來(lái)以下的好處:提高了處理問(wèn)題的抽象級(jí)別;降低了程序設(shè)計(jì)時(shí)的復(fù)雜性;(程序員只需記住一個(gè)接口,而不是好幾個(gè)。)C++多態(tài)性-611.1指向基在的指針和指向派生類的指針整型指針浮點(diǎn)型指針雙精度型指針字符型指針數(shù)組型指針函數(shù)指針結(jié)構(gòu)體指針指向指針的指針__二級(jí)指針

指向基類的指針__基類指針

指向派生類的指針__派生類指針指針:-7

基類指針可以存取基類中的成員,它也可能可通過(guò)指向派生類對(duì)象來(lái)存取派生類中從基類繼承來(lái)的成員,但不能存取派生類中新增添的成員。派生類指針既可以存取派生中從基類繼承灰的成員,亦可存取派生類中新增添的成員。指向基類和派生類的指針是相關(guān)的。例如:

A*p; //指向類型A的對(duì)象的指針

AA_obj

; //類型A的對(duì)象

BB_obj

; //類型B的對(duì)象

p=&A_obj

; //p指向類型A的對(duì)象

p=&B_obj

; //p指向類型B的對(duì)象,

//它是A的派生類 利用p,可以通過(guò)B_obj

訪問(wèn)所有從A_obj

繼承的元素,但不能用p訪問(wèn)B_obj

自身特定的元素(除非用了顯式類型轉(zhuǎn)換)。11.1指向基在的指針和指向派生類的指針-8bcn

bco,*pbco;dcn

dco,*pdco;pbco=&bco;pbco->seti(0);pbco->printi();cout<<pbco->geti()<<endl;pbco=&dco;pbco->seti(10);pbco->printi();cout<<pbco->geti()<<endl;classbcn{public:

inta;voidseti(intii){i=ii;}

int

geti(){return(i);} voidprinti();private:

inti;};classdcn:public

bcn{public:

inta;voidsetj(int

jj){j=jj;}

int

getj(){return(j);} voidprintj();private:

intj;};pdco=&dco;pdco->seti(20);pdco->printi();cout<<pbco->geti()<<endl;pdco->setj(30);pdco->printj();cout<<pbco->geti()<<endl;11.1指向基在的指針和指向派生類的指針第一個(gè)語(yǔ)句把基類指針pbco指向派生類對(duì)象dco,第二至第四個(gè)語(yǔ)句使用基類指針pbco,通過(guò)其已指向派生類對(duì)象dco,訪問(wèn)派生類dcn中從基類繼承來(lái)的成員函數(shù)seti、printi以及geti。若將上述四個(gè)賦值語(yǔ)句改寫(xiě)如下:

pbco=&dco;

pbco->setj(10);

pbco->printj();

cout<<pbco->getj()<<endl;C++編譯器對(duì)于其中的第二至第四個(gè)語(yǔ)句均示同樣的出錯(cuò)信息。因此基類指針pbco雖已指向派生類對(duì)象dco,但也不能訪問(wèn)派生類中新增添的其它成員。((dcn*)pbco)->seti(10);((dcn*)pbco)->printi();cout<<((dcn*)pbco)->geti()<<endl;-911.2使用基類指針引用派生類對(duì)象時(shí)同名成員函數(shù)的處理賦值兼容規(guī)則 賦值兼容規(guī)則是指:在公有派生的情況下,一個(gè)派生類的對(duì)象可用于基類對(duì)象適用的地方。賦值兼容規(guī)則有三種情況(假定類derived由類base派生): (1)派生類的對(duì)象可以賦值給基類的對(duì)象。

derivedd; baseb; b=d;

(2)派生類的對(duì)象可以初始化基類的引用。

derivedd; base&br=d;

(3)派生類的對(duì)象的地址可以賦給指向基類的指針。

derivedd; base*pb=&d;-10classbcn{public:

inta;voidseti(intii){i=ii;}

int

geti(){return(i);} voidprint();private:

inti;};classdcn:public

bcn{public:

inta;voidsetj(int

jj){j=jj;}

int

getj(){return(j);} voidprint();private:

intj;};bcn

bco,*pbco;dcn

dco,*pdco;pbco=&bco;pbco->seti(0);pbco->print();cout<<pbco-geti()<<endl;pbco=&dco;pbco->seti(10);pbco->print();cout<<pbco-geti()<<endl;pdco=&dco;pdco->seti(20);pdco->print();cout<<pbco->geti()<<endl;pdco->setj(30);pdco->print();cout<<pbco->geti()<<endl;訪問(wèn)的是基類的成員函數(shù)print()訪問(wèn)的是基類的成員函數(shù)print()訪問(wèn)的是派生類的成員函數(shù)print()訪問(wèn)的是派生類的成員函數(shù)print()(1)、即使基類與派生類包含非重載的同名函數(shù),通過(guò)基類指針向派生類對(duì)象以存取訪該成員函數(shù)時(shí),其結(jié)果所訪問(wèn)到的仍是從基類繼承來(lái)的那個(gè)成員函數(shù),而不是派生類新增添的那個(gè)同名成員函數(shù)。(2)、若使用派生類指針指向派生類對(duì)象,利用派生類指針存取同名成員函數(shù)時(shí),則根據(jù)同名覆蓋機(jī)制,其結(jié)果所訪問(wèn)到的是派生類新增添的那個(gè)同名函數(shù)。11.2使用基類指針引用派生類對(duì)象時(shí)同名成員函數(shù)的處理-1111.3靜態(tài)聯(lián)編與動(dòng)態(tài)聯(lián)編什么叫聯(lián)編(Binding)?一個(gè)源程序需要經(jīng)過(guò)編譯、連接,才能成為可執(zhí)行代碼。上述過(guò)程中需要將一個(gè)函數(shù)調(diào)用鏈接上相應(yīng)的函數(shù)代碼,這一過(guò)程稱為聯(lián)編。聯(lián)編的目的是要建立函數(shù)調(diào)用與函數(shù)體之間的聯(lián)系,即將一個(gè)函數(shù)調(diào)用連接到一函數(shù)的入口地址。-12靜態(tài)聯(lián)編:在程序被編譯時(shí)進(jìn)行聯(lián)編;(早聯(lián)編)程序執(zhí)行快,但靈活性較小。動(dòng)態(tài)聯(lián)編:在程序運(yùn)行時(shí)聯(lián)編。(晚聯(lián)編,滯后聯(lián)編)靈活性高,程序執(zhí)行慢。動(dòng)態(tài)聯(lián)編是C++實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性的關(guān)鍵因素。11.3靜態(tài)聯(lián)編與動(dòng)態(tài)聯(lián)編-1311.4virtual成員函數(shù)____虛函數(shù)

virtualfloatarea(){return-1;}virtual關(guān)鍵字的作用:指示C++編譯器對(duì)該函數(shù)的調(diào)用進(jìn)行動(dòng)態(tài)聯(lián)編。-1411.4virtual成員函數(shù)____虛函數(shù)#include<iostream.h>classshape{public: floatarea(){return-1;}};classcircle:publicshape{ floatradius;public: voidcircle(floatr){radius=r;} floatarea(){return3.14159*radius*radius;}};-15voidmain(){ shapeobj,*ptr; circlec(3.6);

ptr=&obj; cout<<ptr->area()<<endl;

ptr=&c; cout<<ptr->area()<<endl;}Thepointerofbaseclass“shape".求圓形的面積11.4virtual成員函數(shù)____虛函數(shù)-16輸出的結(jié)果為:-1-1為什么會(huì)是這樣?原因在于這里只是用了靜態(tài)聯(lián)編。前后兩次ptr->area()調(diào)用都鏈接到下面的函數(shù)實(shí)現(xiàn):floatarea(){return-1;}輸出的結(jié)果分析11.4virtual成員函數(shù)____虛函數(shù)-17#include<iostream.h>classshape{public:

virtualfloatarea(){return-1;}};classcircle:publicshape{ floatradius;public: voidcircle(floatr){radius=r;} floatarea(){return3.14159*radius*radius;}};被關(guān)鍵字virtual說(shuō)明的函數(shù)稱為虛函數(shù)11.4virtual成員函數(shù)____虛函數(shù)-18voidmain(){ shapeobj,*ptr; circlec(3.6);

ptr=&obj; cout<<ptr->area()<<endl;

ptr=&c; cout<<ptr->area()<<endl;}Thepointerofbaseclass“shape".C++的編譯器對(duì)虛函數(shù)調(diào)用采取動(dòng)態(tài)聯(lián)編方式輸出結(jié)果:-140.71511.4virtual成員函數(shù)____虛函數(shù)-19虛函數(shù)的定義冠以關(guān)鍵字virtual的成員函數(shù)稱為虛擬函數(shù),簡(jiǎn)稱虛函數(shù)。說(shuō)明虛函數(shù)的方法如下:

virtual<類型說(shuō)明符><函數(shù)名>(<參數(shù)表>)虛函數(shù)是成員函數(shù),而且是非static的成員函數(shù)。包含虛函數(shù)的類被稱為多態(tài)類。11.4virtual成員函數(shù)____虛函數(shù)-20classshape{public:

virtualfloatarea(){};};classtriangle:publicshape{ floatH,W;public: triangle(floath,floatw){H=h;W=w;} floatarea(){returnH*W*0.5;}};在派生類中,虛函數(shù)被重新定義以實(shí)現(xiàn)不同的操作。這種方式稱為函數(shù)超越(overriding),又稱為函數(shù)覆蓋。虛函數(shù)的使用分析11.4virtual成員函數(shù)____虛函數(shù)-21classrectangle:publicshape{ floatH,W;public: rectangle(floath,floatw){H=h;W=w;} floatarea(){returnH*W;}};11.4virtual成員函數(shù)____虛函數(shù)-22voidmain(){shape*s;triangletri(3,4);rectanglerect(3,4);s=&tri;cout<<“Theareaoftriangle:”<<s->area()<<endl;s=▭cout<<“Theareaofrectangle:”<<s->area()<<endl;}請(qǐng)注意:在這里以指針s所指的對(duì)象來(lái)確定執(zhí)行虛函數(shù)area()的哪個(gè)版本?!按_定”是在運(yùn)行時(shí)執(zhí)行的,這構(gòu)成了運(yùn)行時(shí)的多態(tài)性11.4virtual成員函數(shù)____虛函數(shù)-23虛函數(shù)是動(dòng)態(tài)聯(lián)編的基礎(chǔ)virtual關(guān)鍵字的作用:指示C++編譯器對(duì)該函數(shù)的調(diào)用進(jìn)行動(dòng)態(tài)聯(lián)編。盡管可以用對(duì)象名和點(diǎn)算符的方式調(diào)用虛函數(shù),即向?qū)ο蟀l(fā)送消息:tri.area()或者rect.area()這時(shí)是靜態(tài)聯(lián)編方式。只有當(dāng)訪問(wèn)虛函數(shù)是通過(guò)基類指針s時(shí)才可獲得運(yùn)行時(shí)的多態(tài)性。11.4virtual成員函數(shù)____虛函數(shù)-24虛函數(shù)與重載函數(shù)的比較1.從形式上說(shuō),重載函數(shù)要求函數(shù)有相同的函數(shù)名稱,并有不同的參數(shù)序列;2.重載函數(shù)可以是成員函數(shù)和非成員函數(shù);而虛函數(shù)要求這三項(xiàng)(函數(shù)名稱、返回值和參數(shù)序列)完全相同,即具有完全相同的函數(shù)原型。而虛函數(shù)只能是成員函數(shù)。3.對(duì)重載函數(shù)的調(diào)用是以所傳遞參數(shù)序列的差別(參數(shù)個(gè)數(shù)或類型的不同)作為調(diào)用不同函數(shù)的依據(jù);虛擬函數(shù)是根據(jù)對(duì)象的不同去調(diào)用不同類的虛擬函數(shù)。虛函數(shù)在運(yùn)行時(shí)表現(xiàn)出多態(tài)功能,正是C++的精髓之一;而重載函數(shù)不具備這一功能。11.4virtual成員函數(shù)____虛函數(shù)-25

如果某類中的一個(gè)成員函數(shù)被說(shuō)明為虛函數(shù),這就意味著該成員函數(shù)在派生類中可能有不同的實(shí)現(xiàn)。為了實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性,調(diào)用虛函數(shù)應(yīng)該通過(guò)第一次定義該虛函數(shù)的基類對(duì)象指針只有通過(guò)指針或引用標(biāo)識(shí)對(duì)象來(lái)操作虛函數(shù)時(shí),才對(duì)虛函數(shù)采取動(dòng)態(tài)聯(lián)編方式。如果采用一般類型的標(biāo)識(shí)對(duì)象來(lái)操作虛函數(shù),則將采用靜態(tài)聯(lián)編方式調(diào)用虛函數(shù)。構(gòu)造函數(shù)不能是虛擬的,但析構(gòu)函數(shù)可以是虛擬的。

設(shè)計(jì)C++程序時(shí),一般在基類中定義處理某一問(wèn)題的接口和數(shù)據(jù)元素,而在派生類中定義具體的處理方法。通常都將基類中處理問(wèn)題的接口設(shè)計(jì)成虛函數(shù),然后利用基類對(duì)象指針調(diào)用虛函數(shù),從而達(dá)到單一接口,多種功能的目的。虛函數(shù)小結(jié)11.4virtual成員函數(shù)____虛函數(shù)-2611.5純虛函數(shù)和抽象類純虛函數(shù)是指在基類中聲明但是沒(méi)有定義的虛函數(shù),而且設(shè)置函數(shù)值等于零。

virtualtypefunc_name(parameterlist)=0;通過(guò)將虛函數(shù)聲明為純虛函數(shù)可以強(qiáng)制在派生類中重新定義虛函數(shù)。如果沒(méi)有在派生類中重新定義,編譯器將會(huì)報(bào)告錯(cuò)誤。-27classshape{public:

virtualfloatarea()=0; //APUREVIRTUALFUNCTION};classtriangle:publicshape{ floatH,W;public: triangle(floath,floatw){H=h;W=w;} floatarea(){returnH*W*0.5;}};純虛函數(shù)11.5純虛函數(shù)和抽象類-28抽象類:包含有純虛函數(shù)的類稱為抽象類。不能說(shuō)明抽象類的對(duì)象,但能說(shuō)明指向抽象類的指針,一個(gè)抽象類只能作為基類來(lái)派生其他的類。抽象類的指針用于指向該抽象類的派生類的對(duì)象。抽象類11.5純虛函數(shù)和抽象類-29voidmain(){shape*s;triangletri(3,4);rectanglerect(3,4);s=&tri;cout<<“Theareaoftriangle:”<<s->area()<<endl;s=▭cout<<“Theareaofrectangle:”<<s->area()<<endl;}抽象類的例子Shape是抽象類,只能定義指向該類對(duì)象的指針11.5純虛函數(shù)和抽象類-3011.5純虛函數(shù)和抽象類(1)、純虛函數(shù)是在基類中定義的一種特殊虛函數(shù),它亦使用C++關(guān)鍵字virtual作為前綴,但不包含實(shí)現(xiàn),且初始化為0(2)、純虛函數(shù)僅用于為將要由該基類派生的派生類定義同名成員函數(shù)占據(jù)一個(gè)位置。派生類中必須定義與基類的純虛函數(shù)同名的成員函數(shù),并給出具體實(shí)現(xiàn)。(3)、包含純虛函數(shù)的基類稱為抽象基類或抽象類。在一個(gè)基類中,只要加入至少一個(gè)純虛函數(shù),則該基類就成為抽象類。(4)、不能創(chuàng)建抽象基類的對(duì)象,似保證該抽象煁類的“純結(jié)性”。但可以說(shuō)明指向該抽象基類的指針,即抽象類指針。這對(duì)于實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性是必要的。(5)、可以利用類的繼承機(jī)制定義抽象基類的派生類。如果希望創(chuàng)建該派生類的對(duì)象,那么在派生類中必須覆蓋基類中所有純虛函數(shù)。(6)、純虛函數(shù)和抽象基類為面向?qū)ο蟪绦蛟O(shè)計(jì)提供了一種安全機(jī)制。由于在基類中定義了純虛函數(shù),就需要在派生類中給出上具體實(shí)現(xiàn)。純虛函數(shù)和抽象類的使用規(guī)則:-3111.6虛成員函數(shù)表略。-3211.7虛析構(gòu)函數(shù)類的構(gòu)造函數(shù)不能是虛函數(shù),但類的析構(gòu)函數(shù)卻能。其主要目的在于解決當(dāng)使用程序時(shí)的多態(tài)性來(lái)處理涉及在類層次結(jié)構(gòu)中某類對(duì)象的動(dòng)態(tài)內(nèi)存分配及釋放時(shí),避免發(fā)生遺漏釋放所分配內(nèi)存空間的問(wèn)題。

運(yùn)算符new、delete實(shí)現(xiàn)對(duì)類的對(duì)象進(jìn)行動(dòng)態(tài)內(nèi)存分配及釋放。-33structstudents{

intnum; charname[15]; charsex; floatscore;};students*ps;ps=newstudents;//......deleteps;double*pd;pd=newdouble[10];//......delete[]pd;這里表達(dá)式newstudents實(shí)現(xiàn)為類型students的結(jié)構(gòu)體變量在內(nèi)存堆棧區(qū)域動(dòng)態(tài)分配上片連續(xù)的內(nèi)存空間,其大小可由sizeof(students)確定。而相應(yīng)的賦值語(yǔ)句則令結(jié)構(gòu)體指針ps指向該堆內(nèi)存空間的首地址。需注意是,運(yùn)算符new后面跟隨的是一數(shù)據(jù)類型。Delete語(yǔ)句用以實(shí)現(xiàn)原先由new分配的堆內(nèi)存空間。可以使用運(yùn)算符new和delete實(shí)現(xiàn)動(dòng)態(tài)分配及釋放一個(gè)數(shù)組,但表現(xiàn)形式有所不同。為動(dòng)態(tài)分配一個(gè)數(shù)組,需組合使用運(yùn)算符new和[]。同樣地,為動(dòng)態(tài)釋放原先由new[]分配的數(shù)組,需組合使用運(yùn)算符delete和[]。上面由運(yùn)算符new[]申請(qǐng)分配的動(dòng)態(tài)堆內(nèi)存空間大小應(yīng)能存放10個(gè)double類型變量,即為80個(gè)字節(jié)。由delete[]釋放的動(dòng)態(tài)堆內(nèi)存空間即是上述由new[]申請(qǐng)分配的那80個(gè)字節(jié)。11.7虛析構(gòu)函數(shù)-34

運(yùn)算符new、new[]或delete、delete[]亦可用于創(chuàng)建或撤消類的對(duì)象。使用new創(chuàng)建一個(gè)對(duì)象時(shí),不僅在內(nèi)存堆區(qū)為該對(duì)象動(dòng)態(tài)分配指定大小的堆內(nèi)存空間,還同時(shí)調(diào)用該類的構(gòu)造函數(shù),為該對(duì)象做初始化工作。類似地,使用delete以動(dòng)態(tài)地撤消原先由new所創(chuàng)建的對(duì)象時(shí),它先調(diào)用該類的析構(gòu)函數(shù),進(jìn)行必要的清理收尾工作,然后再釋放該對(duì)象所占據(jù)的動(dòng)態(tài)內(nèi)存。11.7虛析構(gòu)函數(shù)-35//programc11_06.cpp#include<iostream>usingnamespacestd;classone{public:one(){

cout<<"classone'sconstructor"<<endl;pd=newdouble[10];

cout<<"dynamicmemoryallocation:"<<sizeof(double)*10<<"bytes"<<endl;}~one()

{

cout<<"classone'sdestructor"<<endl;delete[]pd;

cout<<"dynamicmemoryfree:"<<sizeof(double)*10<<"bytes"<<endl;}private:double*pd;};11.7虛析構(gòu)函數(shù)-36classtwo:publicone{public:

two():one(){

cout<<"classtwo'sconstructor"<<endl;

qd=newdouble[100];

cout<<"dynamicmemoryallocation:"<<sizeof(double)*100<<"bytes"<<endl;}~two(){

cout<<"classtwo'sdestructor"<<endl;delete[]qd;

cout<<"dynamicmemoryfree:"<<sizeof(double)*100<<"bytes"<<endl;}private:double*qd;};11.7虛析構(gòu)函數(shù)-37classthree:publictwo{public:

three():two(){

cout<<"classthree'sconstructor"<<endl;rd=newdouble[1000];

cout<<"dynamicmemoryallocation:"<<sizeof(double)*1000<<"bytes"<<endl;}~three(){

cout<<"classthree'sdestructor"<<endl;delete[]rd;

cout<<"dynamicmemoryfree:"<<sizeof(double)*1000<<"bytes"<<endl;}private:double*rd;};11.7虛析構(gòu)函數(shù)-38voidmain(){ one*pco1; pco1=newtwo; deletepco1;

cout<<endl; pco1=newthree; deletepco1;}11.7虛析構(gòu)函數(shù)不論是將基類指針pco1指向派生類對(duì)象two還是指向派生類對(duì)象three,所調(diào)用的析構(gòu)函數(shù)均是基類的析構(gòu)函數(shù)~one()。因此上述程序C++編譯器實(shí)施的是靜態(tài)聯(lián)編,它根據(jù)基類指針pco1的數(shù)據(jù)類型即one*來(lái)決定調(diào)用哪一個(gè)析構(gòu)函數(shù)。在這種情況下就發(fā)生可能有一大批動(dòng)態(tài)分配內(nèi)存空間被遺漏而未釋放。要解決以上發(fā)生的內(nèi)存遺漏問(wèn)題,唯一要做的事,就是把類層次結(jié)構(gòu)中各個(gè)類的析構(gòu)函數(shù)均定義為虛函數(shù)。-39classone{public:one(){

cout<<"classone'sconstructor"<<endl;pd=newdouble[10];

cout<<"dynamicmemoryallocation:"<<sizeof(double)*10<<"bytes"<<endl;}

virtual~one(){

cout<<"classone's

溫馨提示

  • 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)論