为了账号安全,请及时绑定邮箱和手机立即绑定

请问什么是c++虚函数?

请问什么是c++虚函数?

C++ C
PIPIONE 2021-10-06 11:07:22
#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); //错了吧?reffunction(*ptr); //错了吧?valuefunction(*ptr); //错了吧?}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! //怎么来的?(1)dog(2)cat(0)quit:2meow!meow!mammal speak! //怎么来的?(1)dog(2)cat(0)quit:0
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

这是我学虚函数时的笔记,看完你应该自己能解决上面你的问题了:
1)将基类某函数申明为虚函数,说明基类准备让子类在其中修改该函数的实现
2)如果仅是子类中对基类的A()函数重写,则基类对象调用A()时,仍调用基类中A()的实现,而子类对象调用A()时,调用子类中A()的实现
3)如果基类的A()申明为虚函数,则基类对象调用A()时,调用的是子类中A()的实现,即通过基类指针可以访问派生类的虚方法

查看完整回答
反对 回复 2021-10-10
  • 1 回答
  • 0 关注
  • 274 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信