zoukankan      html  css  js  c++  java
  • 多重继承的构造函数和析构函数的执行顺序(包含虚基类)

    C++代码

    #include <iostream>
    using namespace std;
    
    class A {
    public:
        A()
        {
            cout << "父类A构造函数被调用:" << endl;
        }
    
    
        virtual ~A()
        {
            cout << "父类A虚构函数被调用:" << endl;
        }
    };
    class B {
    public:
        B()
        {
            cout << "父类B构造函数被调用:" << endl;
        }
    
    
        virtual ~B()
        {
            cout << "父类B虚构函数被调用:" << endl;
        }
    };
    
    class C : public A, virtual public B
    {
    public:
        C()
        {
            cout << "C子类构造函数被调用" << endl;
        }
    
    
        ~C()
        {
            cout << "C子类虚构函数被调用:" << endl;
        }
    };
    
    int main()
    {
        cout << "B类是C类的虚基类,A类是C类的非虚基类" << endl;
        cout << "----------下面是执行顺序------------" << endl;
        A *pa = new C();
        delete pa;
        system("PAUSE");
        return(0);
    }
    

    运行结果:

    这里写图片描述

    简单分析:

    多重继承的情况下,严格按照派生类定义时从左到右的顺序来调用构造函数,析构函数与之相反。但是如果基类(基类,父类,超类是指被继承的类,派生类,子类是指继承于基类的类.)中有虚基类的话则构造函数的调用顺序如下:
    (1) 虚基类的构造函数在非虚基类的构造函数之前调用;(比如在本例中B构造函数是虚基类所以在A构造函数之前执行)
    (2) 若同一层次中包含多个虚基类,这些虚基类的构造函数按照他们的说明顺序调用;
    (3) 若虚基类由非虚基类派生而来,则任然先调用基类构造函数,再调用派生诶,在调用派生类的构造函数。

  • 相关阅读:
    约瑟夫环-我的解答与迷宫
    数据结构实验一
    typedef struct 是什么意思
    编程名言名句
    创建单链表
    离散实验一
    Angela Merkel poised for record poll win and historic third term
    我的生活计划-贵在执行,贵在坚持
    考研经验
    2010年河南省普通高校招生本科一批院校 平行投档分数线(理科)
  • 原文地址:https://www.cnblogs.com/snailclimb/p/9086476.html
Copyright © 2011-2022 走看看