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

#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:1
woof
woof
mammal speak! //怎么来的?
(1)dog(2)cat(0)quit:2
meow!
meow!
mammal speak! //怎么来的?
(1)dog(2)cat(0)quit:0

PIPIONE
浏览 275回答 1
1回答

森栏

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