定义一个哺乳动物Mammal类,再由此派生出狗Dog类,二者都定义 Speak()成员函数,基类中定义为虚函数,定义一个Dog类的对象,调用Speak函数,观察运行结果

class Mammal
{
public:
Mammal(){cout<<"Mammal"<<endl;}
virtual void speak(){}
virtual ~Mammal()
{
cout<<"~Mammal::speak()"<<endl;
}
};


class Dog:public Mammal
{
public:
Dog(){cout<<"Dog"<<endl;}
virtual void speak()
{
cout<<"Dog::speak"<<endl;
}
~Dog()
{
cout<<"~Dog::speak()"<<endl;
}
};


void main()
{
Mammal *p;
p=new Dog;
p->speak();
//(*p).speak();
delete p;
p=NULL;

}



运行结果:

定义一个哺乳动物Mammal类,再由此派生出狗Dog类,二者都定义 Speak()成员函数,基类中定义为虚函数,定义一个Dog类的对象,调用Speak函数,观察运行结果


如若基类的析构函数不写关键字virtual,则只会调用基类的析构函数,不会调用派生类的析构函数