程序员

[C++进阶] 为多态基类声明virtual函数

2020-08-22  本文已影响0人  小鱼号的代码日记

为多态基类声明virtual函数

C++明确指出:

当derived class 对象经由一个base class 指针被删除,而该base class 带着non-virtual 析构函数,其结果未有定义。

实际执行时通常发生的是对象的derived成分没有被销毁。

心得体会:

只有当class内含至少一个virtual函数,才为它声明virtual析构函数。

总结:

1.Polymorphic(带有多态性质的)base classes应该声明一个virutal析构函数。如果Class带有任何virtual函数,它就应该拥有一个virtual析构函数。

2.Classes的设计目的如果不是作为base classes使用,或不是为了具备多态性(polymorphically),就不该声明virtual析构函数。

/***************************
effectivre c++
改善程序与设计的55个具体做法
条款7:为多态基类声明virtual函数
 ---------小鱼号的代码日记--------------
****************************/
#include <QCoreApplication>
#include<iostream>
using namespace std;
class TimeKeeper
{
public:
    TimeKeeper()
    {
         cout << "TimeKeeper()" <<endl;
    }
    /* Polymorphic(带有多态性质的)base classes应该声明一个virutal析构函数*/
    virtual ~TimeKeeper()
    {
        cout << "~TimeKeeper()" <<endl;
    }
};
class WaterClock :public TimeKeeper
{
public:
    WaterClock()
    {
        cout << "WaterClock()" <<endl;
    }
    ~WaterClock()
    {
        cout << "~WaterClock()" <<endl;
    }
};
TimeKeeper* getTimeKeeper()
{
    return new WaterClock();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    TimeKeeper* ptk = getTimeKeeper();
    delete ptk;
    return a.exec();
}
1.png
上一篇 下一篇

猜你喜欢

热点阅读