前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++中构造函数、虚函数、析构函数的执行顺序

C++中构造函数、虚函数、析构函数的执行顺序

作者头像
越陌度阡
发布2020-11-26 12:25:21
2.2K0
发布2020-11-26 12:25:21
举报
代码语言:javascript
复制
#include <iostream>
using namespace std;

class A
{
public:
    // 第一步:执行类A的构造函数,输出"构造函数A"
    A() { cout << "构造函数A" << endl; }

    virtual void func()
    {
        cout << "构造A" << endl;
    }
    // 第七步:执行类A的析构函数,输出"析构函数A"
    ~A() { cout << "析构函数A" << endl; }
    virtual void fund()
    {
        cout << "清除A" << endl;
    }
};

class B : public A
{
public:
    // 第二步:执行类B的构造函数,调用类A里虚函数,输出"构造A"
    B() { func(); }
    // 第四步:执行主函数里的c.fun(),输出"开始...",并调用func();
    // 由于fun()不是构造函数和析构函数,且func()为虚函数
    // 所以最终结果输出"开始...类C"
    void fun()
    {
        cout << "开始...";
        func();
    }
    // 第六步:执行类B的析构函数,调用fund()函数;
    // 由于是在析构函数里,且fund()为虚函数,所以执行类A里的fund();
    // 输出清除A
    ~B() { fund(); }
};

class C : public B
{
public:
    // 第三步:执行类C的构造函数,输出"构造函数C"
    C()
    {
        cout << "构造函数C" << endl;
    }
    void func()
    {
        cout << "类C" << endl;
    }
    // 第五步:执行类C的析构函数,输出"清除C"
    ~C() { fund(); }
    void fund()
    {
        cout << "清除C" << endl;
    }
};

int main()
{
    C c;
    c.fun();
    return 0;
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档