C 程序設(shè)計(jì)基礎(chǔ)(第2版)8-虛函數(shù)與多態(tài)性_第1頁
C 程序設(shè)計(jì)基礎(chǔ)(第2版)8-虛函數(shù)與多態(tài)性_第2頁
C 程序設(shè)計(jì)基礎(chǔ)(第2版)8-虛函數(shù)與多態(tài)性_第3頁
C 程序設(shè)計(jì)基礎(chǔ)(第2版)8-虛函數(shù)與多態(tài)性_第4頁
C 程序設(shè)計(jì)基礎(chǔ)(第2版)8-虛函數(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)

文檔簡介

多態(tài)性(Polymorphism)是指一個(gè)名字,多種語義;或界面相同,多種實(shí)現(xiàn)。重載函數(shù)是多態(tài)性的一種簡單形式。虛函數(shù)允許函數(shù)調(diào)用與函數(shù)體的聯(lián)系在運(yùn)行時(shí)才進(jìn)行,稱為動(dòng)態(tài)聯(lián)編。第8章虛函數(shù)與多態(tài)性

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

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

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

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

8.5虛函數(shù)和多態(tài)性的應(yīng)用

小結(jié)第8章虛函數(shù)與多態(tài)性聯(lián)編是指一個(gè)程序模塊、代碼之間互相關(guān)聯(lián)的過程。靜態(tài)聯(lián)編,是程序的匹配、連接在編譯階段實(shí)現(xiàn),也稱為早期匹配。重載函數(shù)使用靜態(tài)聯(lián)編。動(dòng)態(tài)聯(lián)編是指程序聯(lián)編推遲到運(yùn)行時(shí)進(jìn)行,所以又稱為晚期聯(lián)編。

switch語句和if語句是動(dòng)態(tài)聯(lián)編的例子。8.1靜態(tài)聯(lián)編8.1靜態(tài)聯(lián)編普通成員函數(shù)重載可表達(dá)為兩種形式:1.在一個(gè)類說明中重載例如:

Show(int,char); Show(char*,float);8.1靜態(tài)聯(lián)編普通成員函數(shù)重載可表達(dá)為兩種形式:1.在一個(gè)類說明中重載例如:

Show(int,char);與

Show(char*,float);不是同一函數(shù),編譯能夠區(qū)分2.基類的成員函數(shù)在派生類重載。有3種編譯區(qū)分方法:(1)根據(jù)參數(shù)的特征加以區(qū)分8.1靜態(tài)聯(lián)編普通成員函數(shù)重載可表達(dá)為兩種形式:1.在一個(gè)類說明中重載2.基類的成員函數(shù)在派生類重載。有3種編譯區(qū)分方法:(1)根據(jù)參數(shù)的特征加以區(qū)分例如:

A::Show();

有別于 B::Show();(2)使用“

::

”加以區(qū)分8.1靜態(tài)聯(lián)編普通成員函數(shù)重載可表達(dá)為兩種形式:1.在一個(gè)類說明中重載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ū)分根據(jù)this指針類型區(qū)分基類指針和派生類指針與基類對(duì)象和派生類對(duì)象4種可能匹配:直接用基類指針引用基類對(duì)象;直接用派生類指針引用派生類對(duì)象;用基類指針引用一個(gè)派生類對(duì)象;用派生類指針引用一個(gè)基類對(duì)象。8.2類指針的關(guān)系8.2類指針的關(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,可以通過B_obj

訪問所有從

A類繼承的元素,

但不能用

p訪問B類自定義的元素

(除非用了顯式類型轉(zhuǎn)換)classAclassB:publicA8.2.1基類指針引用派生類對(duì)象8.2.1基類指針引用派生類對(duì)象#include<iostream.h>#include<string.h>classA_class{charname[20];public:voidput_name(char*s){strcpy(name,s);}voidshow_name(){cout<<name<<"\n";}};classB_class:publicA_class{charphone_num[20];public:voidput_phone(char*num){strcpy(phone_num,num);}voidshow_phone(){cout<<phone_num<<"\n";}};voidmain(){A_class*A_p;A_classA_obj;B_classB_obj;A_p=&A_obj;A_p->put_name("Wangxiao

hua");A_p->show_name();A_p=&B_obj;A_p->put_name("Chenming");A_p->show_name();

B_obj.put_phone("5555_12345678");((B_class*)A_p)->show_phone();}例8-1使用基類指針引用派生類對(duì)象

classA_classclassB_class:publicA_class8.2.1基類指針引用派生類對(duì)象#include<iostream.h>#include<string.h>classA_class{charname[20];public:voidput_name(char*s){strcpy(name,s);}voidshow_name(){cout<<name<<"\n";}};classB_class:publicA_class{charphone_num[20];public:voidput_phone(char*num){strcpy(phone_num,num);}voidshow_phone(){cout<<phone_num<<"\n";}};voidmain(){A_class*A_p;A_classA_obj;B_classB_obj;A_p=&A_obj;A_p->put_name("Wangxiao

hua");A_p->show_name();A_p=&B_obj;A_p->put_name("Chenming");A_p->show_name();

B_obj.put_phone("5555_12345678");((B_class*)A_p)->show_phone();}基類指針classA_classclassB_class:publicA_class8.2.1基類指針引用派生類對(duì)象例8-1使用基類指針引用派生類對(duì)象

#include<iostream.h>#include<string.h>classA_class{charname[20];public:voidput_name(char*s){strcpy(name,s);}voidshow_name(){cout<<name<<"\n";}};classB_class:publicA_class{charphone_num[20];public:voidput_phone(char*num){strcpy(phone_num,num);}voidshow_phone(){cout<<phone_num<<"\n";}};voidmain(){A_class*A_p;A_classA_obj;B_classB_obj;

A_p=&A_obj;A_p->put_name("Wangxiao

hua");A_p->show_name();A_p=&B_obj;A_p->put_name("Chenming");A_p->show_name();

B_obj.put_phone("5555_12345678");((B_class*)A_p)->show_phone();}基類指針指向基類對(duì)象classA_classclassB_class:publicA_class8.2.1基類指針引用派生類對(duì)象例8-1使用基類指針引用派生類對(duì)象

#include<iostream.h>#include<string.h>classA_class{charname[20];public:voidput_name(char*s){strcpy(name,s);}voidshow_name(){cout<<name<<"\n";}};classB_class:publicA_class{charphone_num[20];public:voidput_phone(char*num){strcpy(phone_num,num);}voidshow_phone(){cout<<phone_num<<"\n";}};voidmain(){A_class*A_p;A_classA_obj;B_classB_obj;A_p=&A_obj;A_p->put_name("Wangxiao

hua");A_p->show_name();A_p=&B_obj;A_p->put_name("Chenming");A_p->show_name();

B_obj.put_phone("5555_12345678");((B_class*)A_p)->show_phone();}基類指針調(diào)用基類成員函數(shù)classA_classclassB_class:publicA_class8.2.1基類指針引用派生類對(duì)象例8-1使用基類指針引用派生類對(duì)象

#include<iostream.h>#include<string.h>classA_class{charname[20];public:voidput_name(char*s){strcpy(name,s);}voidshow_name(){cout<<name<<"\n";}};classB_class:publicA_class{charphone_num[20];public:voidput_phone(char*num){strcpy(phone_num,num);}voidshow_phone(){cout<<phone_num<<"\n";}};voidmain(){A_class*A_p;A_classA_obj;B_classB_obj;A_p=&A_obj;

A_p->put_name("Wangxiao

hua");A_p->show_name();

A_p=&B_obj;A_p->put_name("Chenming");A_p->show_name();

B_obj.put_phone("5555_12345678");((B_class*)A_p)->show_phone();}classA_classclassB_class:publicA_class基類指針指向派生類對(duì)象8.2.1基類指針引用派生類對(duì)象例8-1使用基類指針引用派生類對(duì)象

#include<iostream.h>#include<string.h>classA_class{charname[20];public:voidput_name(char*s){strcpy(name,s);}voidshow_name(){cout<<name<<"\n";}};classB_class:publicA_class{charphone_num[20];public:voidput_phone(char*num){strcpy(phone_num,num);}voidshow_phone(){cout<<phone_num<<"\n";}};voidmain(){A_class*A_p;A_classA_obj;B_classB_obj;A_p=&A_obj;

A_p->put_name("Wangxiao

hua");A_p->show_name();A_p=&B_obj;

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

B_obj.put_phone("5555_12345678");((B_class*)A_p)->show_phone();}classA_classclassB_class:publicA_class調(diào)用從基類繼承的成員函數(shù)8.2.1基類指針引用派生類對(duì)象例8-1使用基類指針引用派生類對(duì)象

#include<iostream.h>#include<string.h>classA_class{charname[20];public:voidput_name(char*s){strcpy(name,s);}voidshow_name(){cout<<name<<"\n";}};classB_class:publicA_class{charphone_num[20];public:voidput_phone(char*num){strcpy(phone_num,num);}voidshow_phone(){cout<<phone_num<<"\n";}};voidmain(){A_class*A_p;A_classA_obj;B_classB_obj;A_p=&A_obj;

A_p->put_name("Wangxiao

hua");A_p->show_name();A_p=&B_obj;A_p->put_name("Chenming");A_p->show_name();

B_obj.put_phone("5555_12345678");((B_class*)A_p)->show_phone();}classA_classclassB_class:publicA_class用派生類對(duì)象調(diào)用派生類的成員函數(shù)8.2.1基類指針引用派生類對(duì)象例8-1使用基類指針引用派生類對(duì)象

#include<iostream.h>#include<string.h>classA_class{charname[20];public:voidput_name(char*s){strcpy(name,s);}voidshow_name(){cout<<name<<"\n";}};classB_class:publicA_class{charphone_num[20];public:voidput_phone(char*num){strcpy(phone_num,num);}

voidshow_phone(){cout<<phone_num<<"\n";}};voidmain(){A_class*A_p;A_classA_obj;B_classB_obj;A_p=&A_obj;

A_p->put_name("Wangxiao

hua");A_p->show_name();A_p=&B_obj;A_p->put_name("Chenming");A_p->show_name();

B_obj.put_phone("5555_12345678");

((B_class*)A_p)->show_phone();}classA_classclassB_class:publicA_class對(duì)基類指針強(qiáng)類型轉(zhuǎn)換調(diào)用派生類的成員函數(shù)8.2.1基類指針引用派生類對(duì)象例8-1使用基類指針引用派生類對(duì)象

#include<iostream.h>#include<string.h>classA_class{charname[20];public:voidput_name(char*s){strcpy(name,s);}voidshow_name(){cout<<name<<"\n";}};classB_class:publicA_class{charphone_num[20];public:voidput_phone(char*num){strcpy(phone_num,num);}voidshow_phone(){cout<<phone_num<<"\n";}};voidmain(){A_class*A_p;A_classA_obj;B_classB_obj;A_p=&A_obj;A_p->put_name("Wangxiao

hua");A_p->show_name();A_p=&B_obj;A_p->put_name("Chenming");A_p->show_name();

B_obj.put_phone("5555_12345678");((B_class*)A_p)->show_phone();}classA_classclassB_class:publicA_class8.2.1基類指針引用派生類對(duì)象例8-1使用基類指針引用派生類對(duì)象

派生類指針只有經(jīng)過強(qiáng)制類型轉(zhuǎn)換之后,才能引用基類對(duì)象8.2.2派生類指針引用基類對(duì)象

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

#include<iostream.h>#include<string.h>classDate{public:Date(inty,intm,intd){SetDate(y,m,d);}voidSetDate(inty,intm,intd){year=y;month=m;day=d;}voidPrint(){cout<<year<<'/'<<month<<'/'<<day<<";";}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(){DateTime

dt(2003,1,1,12,30,0);

dt.Print();}例8-2日期時(shí)間程序。在派生類中調(diào)用基類同名成員函數(shù)

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

#include<iostream.h>#include<string.h>classDate{public:Date(inty,intm,intd){SetDate(y,m,d);}voidSetDate(inty,intm,intd){year=y;month=m;day=d;}voidPrint(){cout<<year<<'/'<<month<<'/'<<day<<";";}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(){DateTime

dt(2003,1,1,12,30,0);

dt.Print();}((Date*)this)->Print();對(duì)this指針作類型轉(zhuǎn)換調(diào)用基類成員函數(shù)

8.2.2派生類指針引用基類對(duì)象例8-2日期時(shí)間程序。在派生類中調(diào)用基類同名成員函數(shù)

#include<iostream.h>#include<string.h>classDate{public:Date(inty,intm,intd){SetDate(y,m,d);}voidSetDate(inty,intm,intd){year=y;month=m;day=d;}

voidPrint(){cout<<year<<'/'<<month<<'/'<<day<<";";}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(){DateTime

dt(2003,1,1,12,30,0);

dt.Print();}((Date*)this)->Print();對(duì)this指針作類型轉(zhuǎn)換調(diào)用基類成員函數(shù)

8.2.2派生類指針引用基類對(duì)象例8-2日期時(shí)間程序。在派生類中調(diào)用基類同名成員函數(shù)

#include<iostream.h>#include<string.h>classDate{public:Date(inty,intm,intd){SetDate(y,m,d);}voidSetDate(inty,intm,intd){year=y;month=m;day=d;}

voidPrint(){cout<<year<<'/'<<month<<'/'<<day<<";";}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(){DateTime

dt(2003,1,1,12,30,0);

dt.Print();}8.2.2派生類指針引用基類對(duì)象例8-2日期時(shí)間程序。在派生類中調(diào)用基類同名成員函數(shù)

Date::Print();等價(jià)嗎?為什么?冠以關(guān)鍵字virtual的成員函數(shù)稱為虛函數(shù)實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)的關(guān)鍵首先是要說明虛函數(shù),另外,必須用基類指針調(diào)用派生類的不同實(shí)現(xiàn)版本8.3虛函數(shù)和動(dòng)態(tài)聯(lián)編

基類指針雖然獲取派生類對(duì)象地址,卻只能訪問派生類從基類繼承的成員8.3.1虛函數(shù)和基類指針8.3.1虛函數(shù)和基類指針#include<iostream.h>classBase{public:Base(charxx){x=xx;}voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;p=&B_obj;p->who();p=&F_obj;p->who();p=&S_obj;p->who();

F_obj.who();((Second_d*)p)->who();}例8-3演示基類指針的移動(dòng)

8.3.1虛函數(shù)和基類指針#include<iostream.h>classBase{public:Base(charxx){x=xx;}voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;p=&B_obj;p->who();p=&F_obj;p->who();p=&S_obj;p->who();

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_obj8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');

Base*p;p=&B_obj;p->who();p=&F_obj;p->who();p=&S_obj;p->who();

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_objp定義基類指針8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;p=&B_obj;p->who();p=&F_obj;p->who();p=&S_obj;p->who();

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_objp8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}

voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;p=&B_obj;p->who();p=&F_obj;p->who();p=&S_obj;p->who();

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_objp8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;

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

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

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_objp8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;

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

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

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_objp8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}

voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;

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

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_objp8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;

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

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

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

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_objp8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}

voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;

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

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

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

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_objp8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;

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

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

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_objpvoidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_dS_obj('E','N','D');Base*p;

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

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

F_obj.who();((Second_d*)p)->who();}ATOENDxyzB_objF_objS_objpvoidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}通過對(duì)象調(diào)用成員函數(shù)8.3.1虛函數(shù)和基類指針例8-3演示基類指針的移動(dòng)

#include<iostream.h>classBase{public:Base(charxx){x=xx;}voidwho(){cout<<"Baseclass:"<<x<<"\n";}protected:charx;};classFirst_d:publicBase{public:First_d(charxx,charyy):Base(xx){y=yy;}voidwho(){cout<<"Firstderivedclass:"<<x<<","<<y<<"\n";}protected:chary;};classSecond_d:publicFirst_d{public:Second_d(charxx,charyy,charzz):First_d(xx,yy){z=zz;}voidwho(){cout<<"Secondderivedclass:"<<x<<","<<y<<","<<z<<"\n";}protected:charz;};voidmain(){BaseB_obj('A');First_dF_obj('T','O');Second_d

溫馨提示

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