#include<iostream.h>class mammal{public:mammal():itsage(1){}virtual~mammal(){}virtual void speak()const{cout<<"mammal speak!\n";}protected:int itsage;};class dog:public mammal{public:void speak()const{cout<<"woof!\n";}};class cat:public mammal{public:void speak()const{cout<<"meow!\n";}void valuefunction(mammal);void ptrfunction(mammal*);void reffunction(mammal&);int main(){mammal*ptr=0;int choice;while(1){bool fquit=false;cout<<"(1)dog(2)cat(0)quit:";cin>>choice;switch(choice){case 0:fquit=true;break;case 1:ptr=new dog;break;case 2:ptr=new cat;break;default:ptr=new mammal;break;}if(fquit)break;ptrfunction(ptr); //錯(cuò)了吧?reffunction(*ptr); //錯(cuò)了吧?valuefunction(*ptr); //錯(cuò)了吧?}return 0;}void valuefunction(mammal mammalvalue){mammalvalue.speak();}void ptrfunction(mammal*pmammal){pmammal->speak();}void reffunction(mammal&rmammal){rmammal.speak();}(1)dog(2)cat(0)quit:1woofwoofmammal speak! //怎么來(lái)的?(1)dog(2)cat(0)quit:2meow!meow!mammal speak! //怎么來(lái)的?(1)dog(2)cat(0)quit:0
1 回答

森欄
TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
這是我學(xué)虛函數(shù)時(shí)的筆記,看完你應(yīng)該自己能解決上面你的問(wèn)題了:
1)將基類某函數(shù)申明為虛函數(shù),說(shuō)明基類準(zhǔn)備讓子類在其中修改該函數(shù)的實(shí)現(xiàn)
2)如果僅是子類中對(duì)基類的A()函數(shù)重寫,則基類對(duì)象調(diào)用A()時(shí),仍調(diào)用基類中A()的實(shí)現(xiàn),而子類對(duì)象調(diào)用A()時(shí),調(diào)用子類中A()的實(shí)現(xiàn)
3)如果基類的A()申明為虛函數(shù),則基類對(duì)象調(diào)用A()時(shí),調(diào)用的是子類中A()的實(shí)現(xiàn),即通過(guò)基類指針可以訪問(wèn)派生類的虛方法
- 1 回答
- 0 關(guān)注
- 297 瀏覽
添加回答
舉報(bào)
0/150
提交
取消