转自:http://blog.xdnice.com/blog84983i63444.html
虚拟函数的引入是为了实现多态性(polymorphism),而虚拟析构函数是怎么实现多态性的?我想通过以下例子进行说明。
#include <iostream>
using namespace std;
class A
{
public:
A(){
cout << "A construction" << endl;
}
virtual ~A() //注意这里
{
cout << "A destruction" << endl;
}
};
class B: public A{
public:
B(){
cout << "B construction" << endl;
}
~B(){
cout << "B destruction" << endl;
}
};
void main(){
{
B pg;
}
cout << "---------------------------" << endl;
{
A *pe = new B( );
delete pe;
}
}
程序运行结果:
A construction
B construction
B destruction
A destruction
---------------------------
A construction
B construction
B destruction
A destruction
如果去掉 virtual 结果为:
A construction
B construction
B destruction
A destruction
---------------------------
A construction
B construction
A destruction
昨天看了一下书,有一些疑惑 关于虚函数的
比如:基类bad 派生类 badplus 有相同的成员函数 void show()
bad tom(.....) //构造一个bad对象tom
badplus dom(.....) //构造一个badplus对象
创建指针
bad * p1=&tom;
badplus *p2=&dom;
如如果show 不是虚函数,则下面都将调用bad类的show函数 以为函数名相同
p1.show()
p2.show()
但另外一种情况用NEW来创建对象
bad * p1=new tom();
bad *p2=new dom();
当用delete释放p2的时候为什么不能调用badplus的析构函数???
这两者的析构函数并不同名啊,一个是~bad() 一个是~badplus()
请大家帮忙解释下 我到现在还是认为只有基类和派生类有同名的成员函数的时候才有必要定义为虚函数, 不知道析构函数为什么也要