美文网首页程序员
[C++进阶] 为多态基类声明virtual函数

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

作者: 小鱼号的代码日记 | 来源:发表于2020-08-22 14:56 被阅读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

相关文章

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

    为多态基类声明virtual函数 C++明确指出: 当derived class 对象经由一个base class...

  • 条款 07:为多态基类声明 virtual 析构函数

    《Effective C++ 中文版 第三版》读书笔记 ** 条款 07:为多态基类声明 virtual 析构函数...

  • C++ 虚函数

    C++多态--虚函数virtual及override 如果 不是虚函数,指向子类对象的基类指针只能调用基类的函数,...

  • 语法

    virtual 1.virtual声明的函数实现多态就是通用的多态实现 2.纯虚函数C++的纯虚函数用于表示一个类...

  • 2017.9.20

    多态:树类对象,多态性是面向对象程序设计的第三个重要特性。在基类用virtual声明成员函数为虚函数。

  • c++多态实现的机制

    什么是c++的多态? 多态的意思是,当有基类和派生类的时候,在基类的函数前加上virtual关键字,在派生类中重写...

  • C++ 虚函数

    虚函数是以 virtual 关键字声明的基类函数。如果在基类中将某个函数指定为 virtual,并且派生类中有另外...

  • C++ 虚函数

    C++ 虚函数 虚函数 基类中使用virtual关键字声明的函数,称为虚函数。虚函数的实现,通过虚函数表来实现的。...

  • 虚函数、纯虚函数

    1.虚函数(impure virtual) C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类...

  • Item 07:为多态基类声明virtual析构函数

    Item 07: Declare destructions virtual in polymorphic base...

网友评论

    本文标题:[C++进阶] 为多态基类声明virtual函数

    本文链接:https://www.haomeiwen.com/subject/ieevjktx.html