关于多态和虚函数

来源:互联网 发布:java nio jar 编辑:程序博客网 时间:2024/05/21 17:08

经典语录:

1 继承一个没有虚析构函数的类是危险的!

2 多态的两个条件是 父类指针子类对象 & 父类vitual虚函数 都满足

看代码:

class ClxBase{public:    ClxBase() {};    virtual ~ClxBase() {}; //virtual 1 :虚析构函数    virtual void DoSomething()  //virtual 2 :多态    { cout << "Do something in class ClxBase!" << endl; };};class ClxDerived : public ClxBase{public:    ClxDerived() {};    ~ClxDerived()   { cout << "Output from the destructor of class ClxDerived!" << endl; };    void DoSomething()   { cout << "Do something in class ClxDerived!" << endl; };};void main(){    ClxBase *pTest = new ClxDerived;   pTest->DoSomething();   delete pTest; } 

1 如果把第一个virtual去掉,则会出现内存泄露,原因是delete pTest时调用了只是父类的析构函数,析构的就是子类对象的父类部分。

2 对于要实现多态,连个条件是一定都要满足的

  保留第二个virtual时,输出的是Do something in class ClxDerived

  去掉第二个virtual后,则执行父类的函数了,故有Do something in class ClxBase

以后写代码,写继承要注意这两点,本质都是对多态条件的理解……

推荐博文:http://blog.csdn.net/rhzwan123/archive/2008/03/05/2151904.aspx