#include <iostream>
using namespace std;
class Person
{ //静态成员函数也不能声名为虚函数
public: //虚函数只能出现在类中,不能将类外面的普通函数定义为虚函数。
Person(); //虚函数,继承方式只能为public形式。
virtual ~Person(); //如果这里不用虚函数,在继承后析构时只调用基类析构函数,派生类析构函数不会被调用,造成内存泄露
virtual show();
private:
char *name;
int age;
};
Person::Person()
{
cout<<"Person"<<endl;
}
Person::~Person()
{
cout<<"~Person"<<endl;
}
class Student:public Person
{
public:
Student();
~Student();
show(); //基类已经定义为虚函数,这里不用再定义为虚函数(当然这里再次申明为虚函数也没关系)
private:
char *stuNo;
};
Student::Student()
{
cout<<"Student"<<endl;
}
Student::~Student()
{
cout<<"~Student"<<endl;
}
int main()
{
Person *p;
p = new Student();
p->show(); //因为基类定义为虚函数,所以这里调用的是派生类的函数。如果基类没有定义为虚函数,调用基类的show();
delete p;
return 0;
}
以上执行结果为:
Person
Student
~Student
~Person
如果基类中析构函数不是虚函数,输出为:
Person
Student
~Person
结论:继承时析构函数尽量定义为虚函数。