虛函數(shù)與多態(tài)性_第1頁
虛函數(shù)與多態(tài)性_第2頁
虛函數(shù)與多態(tài)性_第3頁
虛函數(shù)與多態(tài)性_第4頁
虛函數(shù)與多態(tài)性_第5頁
已閱讀5頁,還剩99頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章虛函數(shù)與多態(tài)性

>多態(tài)性(Polymorphism)是指一個(gè)名字,多種語義;或界面

相同,多種實(shí)現(xiàn)。

>重載函數(shù)是多態(tài)性的一種簡(jiǎn)單形式。

>虛函數(shù)允許函數(shù)調(diào)用與函數(shù)體的聯(lián)系在運(yùn)行時(shí)才進(jìn)行,稱為

動(dòng)態(tài)聯(lián)編。

第8章虛函數(shù)與多態(tài)性

2-

甯孑工常出版社

SPublishingHouseofElectronicsIndustry

8.1靜態(tài)聯(lián)編

A聯(lián)編是指一個(gè)程序模塊、代碼之間互相關(guān)聯(lián)的過程。

?靜態(tài)聯(lián)編,是程序的匹配、連接在編譯階段實(shí)現(xiàn),也稱為早期匹配。

重載函數(shù)使用靜態(tài)聯(lián)編。

A動(dòng)態(tài)聯(lián)編是指程序聯(lián)編推遲到運(yùn)行時(shí)進(jìn)行,所以又稱為晚期聯(lián)編。

switch語句和if語句是動(dòng)態(tài)聯(lián)編的例子。

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006O

得甯孑工學(xué)出版杜

?—??=?PublishingHouseofElectronicsIndustry

8.1靜態(tài)聯(lián)編

普通成員函數(shù)重載可表達(dá)為兩種形式:

1.在一個(gè)類說明中重載

例如:Show(int,char);

Show(char*,float);

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

國甯孑工學(xué)出版杜

PublishingHouseofElectronicsIndustry

8.1靜態(tài)聯(lián)編

普通成員函數(shù)重載可表達(dá)為兩種形式:

1.在一個(gè)類說明中重載

2.基類的成員函數(shù)在派生類重載。有3種編譯區(qū)分方法:

(1)根據(jù)參數(shù)的特征加以區(qū)分

例如:Show(int,char);與

Show(char*,float);不是同一函數(shù),編譯能夠區(qū)分

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

國甯孑工學(xué)出版杜

PublishingHouseofElectronicsIndustry

8.1靜態(tài)聯(lián)編

普通成員函數(shù)重載可表達(dá)為兩種形式:

1.在一個(gè)類說明中重載

2.基類的成員函數(shù)在派生類重載。有3種編譯區(qū)分方法:

(1)根據(jù)參數(shù)的特征加以區(qū)分

(2)使用“::”加以區(qū)分

例如:A::Show();

有另!J于B::Show();

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

得甯孑工學(xué)出版杜

?—??=?PublishingHouseofElectronicsIndustry

8.1靜態(tài)聯(lián)編

普通成員函數(shù)重載可表達(dá)為兩種形式:

1.在一個(gè)類說明中重載

2.基類的成員函數(shù)在派生類重載。有譯區(qū)根據(jù)this指針類型區(qū)分

(1)根據(jù)參數(shù)的特征加以區(qū)分

(2)使用“::”加以區(qū)分

(3)根據(jù)類對(duì)象加以區(qū)分

例如:Aobj.Show()調(diào)用A::Show()

Bobj.Show()調(diào)用B::Show()

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

8.2類指針的關(guān)系

基類指針和派生類指針與基類對(duì)象和派生類對(duì)象4種可能匹配:

>直接用基類指針引用基類對(duì)象;

>直接用派生類指針引用派生類對(duì)象;

A用基類指針引用一個(gè)派生類對(duì)象;

>用派生類指針引用一個(gè)基類對(duì)象。

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006O

8.2.1基類指針引用派生類對(duì)象

classA

例如:

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

AAobj;〃類型A的對(duì)象classB:publicA

BBobj;〃類型B的對(duì)象

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

p=&Bobj;//p指向類型B的對(duì)象,它是A的派生類

>利用p,可以通過B_obj訪問所有從A類繼承的元素,

但不能用p訪問B類自定義的元素(除非用了顯式類型轉(zhuǎn)換)

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

#include<string.h>例8—1使用基類指針引用派生類對(duì)象

classAclass

{charname[20];

public:voidput_name(char*s){strcpy(name,s);}

voidshow_name(){cout?name?"\n";}

classBclass:publicAclass

{charphonenum[20];

public:voidput_phone(char*num){strcpy(phonenum,num);}

voidshow_phone(){cout?phonenum?"\n";}

};

voidmain()

{A_class*Ajp;AclassAobj;

B_classB_obj;

Ajp=&Aobj;

A_p->put_name("Wangxiaohua");A_p->show_name();

A_p=&Bobj;

A_p->put_name("Chenming");A_p->show_name();

Bobj.putphone(”5555」2345678”);

((B_class*)A_p)->showjphone();

}"

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

#include<string.h>例8T使用基類指針引用派生類對(duì)象

classAclass

{charname[20];

classAclass

public:voidput_name(char*s){strcpy(name,s);}

voidshow_name(){cout?name?"\n";}/k

J,

classBclass:publicAclassclassBclass:publicAclass

{charphonenum[20];基類指針

public:voidput_phone(num)num,num);}

voidshow_plx^he(){cout?phonenum?"\n";}

};

voidmain()

*A^pT)A_classAobj;

B^cTass~~ETotj;

Ajp=&Aobj;

A_p->put_name("Wangxiaohua");A_p->show_name();

A_p=&Bobj;

A_p->put_name("Chenming");A_p->show_name();

Bobj.putphone(”5555」2345678");

((B_class*)A_p)->showjphone();

}"

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

#include<string.h>例8T使用基類指針引用派生類對(duì)象

classAclass

{charname[20];

classAclass

public:voidput_name(char*s){strcpy(name,s);}

voidshow_name(){cout?name?"\n";}

classBclass:publicAclassclassBclass:publicAclass

{charphonenum[20];

public:voidput_phone(char*num)>(-strepy

基類指針

voidshow_phone(){cout$^<phoner

);/指向基類對(duì)象

voidmain()/

{A_class*Ajp;AclarsAobj;

A_p->put_name("Wangxiaohua");A_p->show_name();

A_p=&Bobj;

A_p->put_name("Chenming");A_p->show_name();

Bobj.putphone(”5555」2345678”);

((B_class*)A_p)->showjphone();

}"

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

#include<string.h>例8—1使用基類指針引用派生類對(duì)象

classAclass

{charname[20];

public:voidput_name(char*s){strcpy(name,s)

voidshownameQ{cout?name?”\n”;

J,

classBclass:publicAclass

{charphonenum[20];

public:voidput_phone(char*num){strcpy(phonenum,num);}

voidshow_phone(){cout?phonum

基類指針

};

voidmain()調(diào)用基類成員函數(shù)

{A_class*Ajp;A_classA_c^j;

B_classB_obj;

Ajp=&Aobj;

A_p->put_name(nWangxiaohuan);A_p->shownameQ;

Ajp=&Bobj;

A_p->put_name("Chenming");A_p->show_name();

Bobj.putphone(”5555」2345678”);

((B_class*)A_p)->showjphone();

}"

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

#include<string.h>例8T使用基類指針引用派生類對(duì)象

classAclass

{charname[20];

classAclass

public:voidput_name(char*s){strcpy(name,s);}

voidshow_name(){cout?name?"\n";}

classB_class:publicA_classclassBclass:publicAclass

{charphonenum[20];--------------

public:voidput_phone(char*num){strcpy(phonenum,num);}

voidshow_phone(){cout?phonenum?"\n";}

3/~

基類指針

voidmain()/

{A_class*Ajp;A_cla^Aobj;指向派生類對(duì)象

B_classB_obj;/

A_p=&Aobj;/

Ap->putnam^f"Wangxiaohua");A_p->show_name();

=&B

A_p->put_name("Chenming");A_p->show_name();

Bobj.putphone(”5555」2345678”);

((B_class*)A_p)->showjphone();

}"

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

#include<string.h>例8T使用基類指針引用派生類對(duì)象

classAclass

public:voidput_phone(char*num){strcpy(phonenum,num);}

voidshow_phone(){cout?phonenum?"\n";}

};

voidmain()調(diào)用

{A_class*Ajp;A_classAobj;

從基類繼承的成員函數(shù)

B_classB_obj;

Ajp=&Aobj;

A_p->put_name("Wangxiaohua")/A__p->show_name();

A_p=&Bobj;

A_p->put_name(''Chenming”);A_p->show_name();

Bobj.putphone(”5555」2345678”);

((B_class*)A_p)->showjphone();

}"

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

#include<string.h>例8—1使用基類指針引用派生類對(duì)象

classAclass

{charname[20];

public:voidput_name(char*s){strcpy(name,s);}

voidshow_name(){cout?name?"\n";}

classBclass:publicAclass

{charphonenum[20];

public:voidput_phone(char*num){strcpy(phonenum,num);}

voidshow_phone(){cout?phonenum?"\n";}

};

voidmain()

((B_class*)A_p)->showjphone();

}"

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

#include<string.h>例8T使用基類指針引用派生類對(duì)象

classAclass

{charname[20];

public:voidput_name(char*s){strcpy(name,s);}

voidshow_name(){cout?name?"\n";}

classBclass:publicAclass

{charphonenum[20];

public:voidput_phone(char*num){strcpy(phonenum,num);}

voidshow_phone(){cout?phonenum?M\nH;}

};

voidmain()

{A_class*Ajp;AclassA/obj;對(duì)基類指針強(qiáng)類型轉(zhuǎn)換

B_classB_obj;/

A_p=&Aobj;/調(diào)用派生類的成員函數(shù)

A_p->put_name("W^rfgxiaohua");A_p->showname();

A_p=&Bobj;/

A_p->put_name(/Chenming");A_p->show_name();

Bobj.putphon4j,555512345678");

Cf^B_cIass_*JA_25>>show_phone();

}一一

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

#include<string.h>例8T使用基類指針引用派生類對(duì)象

classAclass

charname[20];

public:voidput_name(char*s){strcpy(name,s);}

voidshow_name(){cout?name?"\n";}

classB_class:publicA_classclassBclass:publicAclass

{charphonenum[20];----------------------------------------

public:voidput_phone(char*num){strcpy(phonenum,num);}

voidshow_phone(){cout?phonenum?"\n";}

};

voidmain()

{A_class*Ajp;AclassAobj;

B_classB_obj;

Ajp=&Aobj;

A_p->put_name("Wangxiaohua");A_p->

A_p=&Bobj;

A_p->put_name("Chenming");A_p->show_name();

Bobj.putphone(”5555」2345678");

((B_class*)A_p)->showjphone();

}"

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

8.2.2派生類指針引用基類對(duì)象

>派生類指針只有經(jīng)過強(qiáng)制類型轉(zhuǎn)換之后,才能

引用基類對(duì)象

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>例8?2日期時(shí)間程序。在派生類中調(diào)用基類

#include<string.h>

同名成員函數(shù)

classDate

{public:

Date(inty,intm,intd){SetDate(y,m,d);}

voidSetDate(inty,intm,intd){year=y;month=m;day=d;}

voidPrint(){cout?year?7'?month?7'?day?n;";}

protected:intyear,month,day;

);

classDateTime:publicDate

{public:

DateTime(inty,intm,intd,inth,intmi,ints):Date(y,m,d){SetTime(h,mi,s);}

voidSetTime(inth,intmi,ints){hours=h;minutes=mi;seconds=s;}

voidPrint()

{((Date*)this)->Print();

cout?hours??minutes??seconds?'\n';

)

private:inthours,minutes,seconds;

};

voidmain()

{DateTimedt(2003,1,1,12,30,0);

dt.Print();

)

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>例8?2日期時(shí)間程序。在派生類中調(diào)用基類

#include<string.h>

同名成員函數(shù)

classDate

{public:

Date(inty,intm,intd){SetDate(y,m,d);}

voidSetDate(inty,intm,intd){year=y;month=m;day=d;}

voidPrint(){cout?year?7'?month?7'?day?n;";}

protected:intyear,month,day;

};

classDateTime:publicDate/「對(duì)this指針作類型轉(zhuǎn)換

{public:/

調(diào)用基類成員函數(shù)

DateTime(inty,intm,intd,inMi,intmi,intss);)

voidSetTime(inth,intmi^ims){hours=h;minutes=mi;seconds=s;}

voidPrintf)

{*)thisj^>Print();

cout<<hours<<?minutes??seconds?'\n';

)

private:inthours,minutes,seconds;

};

voidmain()

{DateTimedt(2003,1,1,12,30,0);

dt.Print();

)

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>例8?2日期時(shí)間程序。在派生類中調(diào)用基類

#include<string.h>

同名成員函數(shù)

classDate

{public:

Date(inty,intm,intd){SetDate(y,m,d);}

voidSetDate(inty,intm,intd){year=y;month=m;day=d;}

voidPrint(){cout?year?7*?month?7,?day?";'';}

protected:intyear,month,day;

};

classDateTime:publicDate/「對(duì)this指針作類型轉(zhuǎn)換

{public:/

調(diào)用基類成員函數(shù)

DateTime(inty,intm,intd,inMi,intmi,intss);)

voidSetTime(inth,intmi^ims){hours=h;minutes=mi;seconds=s;}

voidPrintf)

{*)thisj^>Print();

cout<<hours<<?minutes??seconds?'\n';

)

private:inthours,minutes,seconds;

};

voidmain()

{DateTimedt(2003,1,1,12,30,0);

dt.Print();

)

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>例8?2日期時(shí)間程序。在派生類中調(diào)用基類

#include<string.h>

同名成員函數(shù)

classDate

{public:

Date(inty,intm,intd){SetDate(y,m,djk

voidSetDate(inty,intm,intd){year

voidPrint(){cout?year?7*<等價(jià)嗎?

protected:intyear,month,day;為什么

};

classDateTime:publicDate

{public:O

DateTime(inty,intm,intd,inth,intmi,ints):Date(y,m,d){SetTime(h,mi,s);}

voidSetTime(inth,intmi,intsP{hours=h;minutes=mi;seconds=s;}

voidPrint()o

{Date::Print();

cout?hours??minutes??seconds?'\n';

}

private:inthours,minutes,seconds;

};

voidmain()

{DateTimedt(2003,1,1,12,30,0);

dt.Print();

)

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

得甯孑工學(xué)出版杜

PublishingHouseofElectronicsIndustry

8.3虛函數(shù)和動(dòng)態(tài)聯(lián)編

>冠以關(guān)鍵字virtual的成員函數(shù)稱為虛函數(shù)

>實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)的關(guān)鍵首先是要說明虛函數(shù),另外,必須用

基類指針調(diào)用派生類的不同實(shí)現(xiàn)版本

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006O

8.3.1虛函數(shù)和基類指針

>基類指針雖然獲取派生類對(duì)象地址,卻只能訪問派生類從基

類繼承的成員

華南理工大學(xué)計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

classBase例8-3演示基類指針的移動(dòng)

{public:Base(charxx){x=xx;}

voidwho(){cout?"Baseclass:"?x?"\n";}

protected:charx;

);

classFirstd:publicBase

{public:First_d(charxx,charyy):Base(xx){y=yy;}

voidwho(){cout?"Firstderivedclass:"?x?",n?y?n\n";}

protected:chary;

);

classSecondd:publicFirstd

{public:

Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}

voidwho(){cout?"Secondderivedclass:n?x?",?y?","?z?"\n";}

protected:charz;

};

voidmain()

{BaseB_obj(W);First_dF_obj(T,O);Second_dS_obj(E,N,D);

Base*p;

p=&Bobj;p->who();

p=&F_obj;p->who();

p=&S_obj;p->who();

F_obj.who();

((Secondd*)p)->who();人

華南理工大』計(jì)算機(jī)學(xué)院周靄如2006一勺

#include<iostream.h>

classBase例8—3演示基類指針的移動(dòng)

{public:Base(charxx){x=xx;}

voidwho(){cout?"Baseclass:?X?n\nu;}

protected:charx;

);

classFirstd:publicBase

{public:First_d(charxx,charyx

voidwho(){cout?

B_objA

protected:chary;y

);

classSecondd:publicFirstF_objTo

{public:

Second_d(charxx,charyy,chaiS_objEND

voidwho(){cout?”Secondd

protected:charz;

};

voidmain()

{BaseB_obj('A');FirstdF_obj(rTf;Second_dS_obj('E','N','D');

Base*p;

p=&Bobj;p->who();

p=&F_obj;p->who();

p=&S_obj;p->who();

F_obj.who();

((Secondd*)p)->who();

華南理工大苧計(jì)算機(jī)學(xué)院周需如2006

#include<iostream.h>

classBase例8—3演示基類指針的移動(dòng)

{public:Base(charxx){x=xx;}

voidwho(){cout?"Baseclass:n?x?"\n";}

protected:charx;

);

classFirstd:publicBase

{public:First_d(charxx,charyx

voidwho(){cout??---->

B_objA

protected:chary;IMy

};

classSecondd:publicFirstF_objo

{public:定義基類指針

Second_d(char,charS_objEND

voidwho(){cp(fit?"S

protected:chz;

);

voidmain()

{BaseBy6bj('A');FirstdF_obj(T,'0’);SeconddsS_obj(E,N,;

Base*p;

p=&Bobj;p->who();

p=&F_obj;p->who();

p=&S_obj;p->who();

F_obj.who();

((Secondd*)p)->who();

華南理工大學(xué)計(jì)算機(jī)學(xué)院周需如2006

#include<iostream.h>

classBase例8-3演示基類指針的移動(dòng)

{public:Base(charxx){x=xx;}

voidwho(){cout?"Baseclass:?X?n\nn;}

protected:charx;

);

classFirstd:publicBase

{public:First_d(charxx,charyx

voidwho(){cout?----

>BobjA

protected:chary;~y

);

classSecondd:publicFirstFobjTO

{public:

Second_d(charxx,charyy,chaiS_objEND

voidwho(){cout?”Secondd

protected:charz;

};

voidmain()

{BaseB_obj(;FirstdF_obj(T,6');Second_dS_obj(EJN','D');

Base*p;

p=&Bobj;p->who();

p=&F_obj;p->who();

p=&S_obj;p->who();

F_obj.who();

((Secondd*)p)->who();

華南理工大苧計(jì)算機(jī)學(xué)院周需如2006

#include<iostream.h>

classBase例8-3演示基類指針的移動(dòng)

{public:Base(charxx){x=xx;}

voidwhoO{cout?HBaseclass:“?x?"\nH;}

protected:charx;

);

classFirstd:publicBase

{public:First_d(charxx,charyx

voidwho(){cout?

p-----?BobjA

protected:chary;y

);

classSecondd:publicFirstF_objTO

{public:z

Second_d(charxx,charyy,chaiS_objEND

voidwho(){cout?"Secondd

protected:charz;

};

voidmain()

{BaseB_obj('A');First_dF_obj(T,O);Second_dS_obj(E,N,;

Base*p;

p=&Bobj;p->who();

p=&F_obj;p->who();

p=&S_obj;p->who();

F_obj.who();

((Secondd*)p)->who();

華南理工大J計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

classBase例8-3演示基類指針的移動(dòng)

{public:Base(charxx){x=xx;}

voidwho(){cout?"Baseclass:"?x?"\n";}

protected:charx;

);

classFirstd:publicBase

{public:First_d(charxx,charyx

voidwho(){cout?

B_objA

protected:chary;y

);

classSecondd:publicFirstP-----?FobjTo

{public:

Second_d(charxx,charyy,chaiS_objEND

voidwho(){cout?"Secondd

protected:charz;

};

voidmain()

{BaseB_obj('A');First_dF_obj(T,O);Second_dS_obj(E,N,;

Base*p;

p=&Bobj;p->who();

p=&F_obj;p->who();

p=&S_obj;p->who();

F_obj.who();

((Secondd*)p)->who();

華南理工大J計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

classBase例8-3演示基類指針的移動(dòng)

{public:Base(charxx){x=xx;}

voidwho(){cout?"Baseclass:"?x?"\n";}

protected:charx;

);

classFirstd:publicBase

{public:First_d(charxx,charyx

voidwho(){cout?

B_objA

protected:chary;y

);

classSecondd:publicFirstP-----?Fobjo

{public:

Second_d(charxx,charyy,chaiS_objEND

voidwho(){cout?"Secondd

protected:charz;

};

voidmain()

{BaseB_obj('A');First_dF_obj(T,O);Second_dS_obj(E,N,;

Base*p;

p=&Bobj;p->who();

p=&F_obj;p->who();

p=&S_obj;p->who();

F_obj.who();

((Secondd*)p)->who();

華南理工大J計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

classBase例8-3演示基類指針的移動(dòng)

{public:Base(charxx){x=xx;}

voidwhoO{cout?HBaseclass:“?x?"\nH;}

protected:charx;

);

classFirstd:publicBase

{public:First_d(charxx,charyx

voidwho(){cout?

protected:chary;B_objAy

);

classSecondd:publicFirstP-----?FobjTO

{public:z

Second_d(charxx,charyy,chaiS_objEND

voidwho(){cout?"Secondd

protected:charz;

};

voidmain()

{BaseB_obj('A');First_dF_obj(T,O);Second_dS_obj(E,N,;

Base*p;

p=&Bobj;p->who();

p=&F_obj;p->who();

p=&S_obj;p->who();

F_obj.who();

((Secondd*)p)->who();

華南理工大J計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

classBase例8-3演示基類指針的移動(dòng)

{public:Base(charxx){x=xx;}

voidwho(){cout?"Baseclass:"?x?"\n";}

protected:charx;

);

classFirstd:publicBase

{public:First_d(charxx,charyx

voidwho(){cout?

protected:chary;B_objAy

}?

classSecondd:publicFirstFobjTo

{public:

Second_d(charxx,charyy,chai:ril------>SobjEND

voidwho(){cout?”Secondd

protected:charz;

};

voidmain()

{BaseB_obj('A');First_dF_obj(T,O);Second_dS_obj(E,N,;

Base*p;

p=&Bobj;p->who();

p=&F_obj;p->who();

p=&S_obj;p->who();

F_obj.who();

((Secondd*)p)->who();

華南理工大J計(jì)算機(jī)學(xué)院周靄如2006

#include<iostream.h>

classBase例8-3演示基類指針的移動(dòng)

{public:Base(charxx){x=xx;}

voidwhoO{cout?HBaseclass:“?x?"\nH;}

protected:charx;

);

classFirstd:publicBase

{public:First_d(charxx,charyx

voidwho(){cout?

B_objA

protected:chary;y

);

classSecondd:publicFirstF_objTO

{public:z

Second_d(charxx,charyy,chai萬]---?S_objEND

voidwho(){cout?"Secondd

protected:charz;

};

voidmain()

{BaseB_obj('A');First_dF_obj(T,O);Second_dS_obj(E,N,;

Base*p;

p=&Bobj;p->who();

p=&F_obj;p->who();

p=&S_obj;p->who();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論