




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 煤礦安裝綜掘機(jī)施工方案
- 遼寧管道防腐施工方案
- 新鄉(xiāng)停車場照明施工方案
- 全面提高云杉育苗質(zhì)量和成活率的栽培技術(shù)研究
- 新未來大學(xué)英語 視聽說教程1(智慧版) 聽力腳本匯 Unit 1 -6
- 新未來大學(xué)英語 視聽說教程1(智慧版) 聽力腳本 Unit 2
- 變電站無人機(jī)智能識(shí)別技術(shù)
- 任務(wù)型教學(xué)法在高中語文教學(xué)中的應(yīng)用研究
- 基于問題鏈的高中英語閱讀教學(xué)實(shí)踐探究
- 加強(qiáng)污染防治和生態(tài)建設(shè)的策略及實(shí)施路徑
- 慢性呼吸道疾病的早期癥狀
- 【初中語文】第6課《老山界》課件 2023-2024學(xué)年統(tǒng)編版語文七年級(jí)下冊(cè)
- 新生兒羊膜束帶綜合征
- 銀行法律法規(guī)
- 道路貨物運(yùn)輸經(jīng)營申請(qǐng)表
- 班級(jí)家長群管理制度
- 《秘書文檔管理》思考與實(shí)訓(xùn)習(xí)題及答案 -第4章
- 陪診服務(wù)的項(xiàng)目計(jì)劃書
- 醫(yī)院口腔科醫(yī)院感染管理考核標(biāo)準(zhǔn)
- 血管外科護(hù)理課件
- 海康威視槍機(jī)攝像機(jī)檢測報(bào)告.文檔
評(píng)論
0/150
提交評(píng)論