1)没有使用vitual
#include <iostream>
using namespace std;
class Base
{
public:
Base()
{
cout << "Base::Base()" << endl;
}
~Base()
{
cout << "Base::~Base()" << endl;
}
};
class Sub : public Base
{
public:
Sub()
{
cout << "Sub::Sub()" << endl;
}
~Sub()
{
cout << "Sub::~Sub()" << endl;
}
};
int main(void)
{
Base *m_pBase = (Base*)new Sub();
delete m_pBase;
Sub *m_pSub = (Sub*)new Base();
delete m_pSub;
return 0;
}
Base *m_pBase = (Base*)new Sub();命令显示:
Base::Base()
Sub::Sub()
delete m_pBase;命令显示
Base::~Base()
Sub *m_pSub = (Sub*)new Base();命令显示:
Base::Base()
delete m_pSub;命令显示:
Sub::~Sub()
Base::~Base()
2)虚函数vitual
#include <iostream>
using namespace std;
class Base
{
public:
Base()
{
cout << "Base::Base()" << endl;
}
virtual ~Base()
{
cout << "Base::~Base()" << endl;
}
};
class Sub : public Base
{
public:
Sub()
{
cout << "Sub::Sub()" << endl;
}
virtual ~Sub()
{
cout << "Sub::~Sub()" << endl;
}
};
int main(void)
{
Base *m_pBase = (Base*)new Sub();
delete m_pBase;
Sub *m_pSub = (Sub*)new Base();
delete m_pSub;
return 0;
}
显示结果:
Base *m_pBase = (Base*)new Sub();命令显示:
Base::Base()
Sub::Sub()
delete m_pBase;命令显示
Sub::~Sub()
Base::~Base()
Sub *m_pSub = (Sub*)new Base();命令显示:
Base::Base()
delete m_pSub;命令显示
Base::~Base()