如果一个类被当做基类,最好吧析构函数协成虚函数,
加入一个父类指针指向子类的对象,当delete其对象的时候,之后调用父类的析构函数,不会调用子类的析构函数
如下例子所示
#include<bits/stdc++.h>
using namespace std;
class A {
public:
virtual ~A(){
cout << "a";
}
};
class B :public A {
public:
~B(){
cout << "b";
}
};
class C : public B{
public:
int x;
~C(){
cout<<'c';
}
};
int main(void)
{
A* tem = new C();
delete tem;
}
程序只会输出a
而把父类的虚函数写出虚的,那么子类的虚函数也会随之调用
子类重写了父类的虚函数,那么子类的这个函数也是虚的
如下所示:
#include<bits/stdc++.h>
using namespace std;
class A {
public:
virtual ~A(){
cout << "a";
}
};
class B :public A {
public:
~B(){
cout << "b";
}
};
class C : public B{
public:
int x;
~C(){
cout<<'c';
}
};
int main(void)
{
A* tem = new C();
delete tem;
}