------------------------------------.h--------------------------
#include <iostream>
using namespace std;
class ClxBase
{
public:
ClxBase() {};
virtual ~ClxBase() {cout<<"ClxBase Release"<<endl;};
//将基类析构函数设为虚函数的目的
//将CObject的析构函数设为virtual型,
//则所有的CObject类的派生类的析构函数都将自动变为virtual 型,
//这保证了在任何情况下,不会出现由于析构函数未被调用而导致的内存泄露。
//有派生类时才派上用场的,当派生类对象赋给基类指针,当释放指针时,调用
//派生类析构函数,然后在调用基类析构函数
virtual void DoSomething()
{
//cout << "Do something in class ClxBase!" << endl;
};
};
class ClxDerived : public ClxBase
{
public:
ClxDerived() {};
~ClxDerived() { cout << "ClxDerived Release" << endl; };
void DoSomething()
{
//cout << "Do something in class ClxDerived!" << endl;
};
};
---------------------------------------.cpp---------------------------
#include "stdafx.h"
#include "XiGouHanShuVirtual.h"
int main(int argc, char* argv[])
{
ClxBase *pTest = new ClxDerived;
pTest->DoSomething();
delete pTest;
return 0;
}
-----------------------------------输出结果-----------------------------------
ClxDerived Release
ClxBase Release
当然了此例也可以用来验证多态性!
另外,还有一个需要弄清楚的一个问题,在多继承时出现的问题是类成员的“多义性”,而多态性出现需要的条件为:(1)必须有虚函数;(2)必须有继承;(3)必须有派生类对象赋值给基类指针。