析构函数(Virtual)的原因

    技术2022-05-19  27

    ------------------------------------.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)必须有派生类对象赋值给基类指针。


    最新回复(0)