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;
{
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;
}
运行结果:
如若基类的析构函数不写关键字virtual,则只会调用基类的析构函数,不会调用派生类的析构函数