多重继承的构造函数和析构函数的执行顺序(包含虚基类)

简介: C++代码:#include using namespace std;class A {public: A() { cout

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) 若虚基类由非虚基类派生而来,则任然先调用基类构造函数,再调用派生诶,在调用派生类的构造函数。

目录
相关文章
|
5月前
|
存储 Cloud Native Linux
C++ 继承下的构造函数和析构函数执行顺序
C++ 继承下的构造函数和析构函数执行顺序
|
5月前
|
编译器 C++
44 C++ - 继承中的构造和析构
44 C++ - 继承中的构造和析构
25 0
|
7月前
|
Java 编译器 程序员
C++中的语法知识虚继承和虚基类
多继承(Multiple Inheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。 多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承,如下图所示: 图1:菱形继承 类 A 派生出类 B 和类 C,类 D 继承自类 B 和类 C,这个时候类 A 中的成员变量和成员函数继承到类 D 中变成了两份,一份来自 A-->B-->D 这条路径,另一份来自 A-->C-->
121 1
|
9月前
|
存储 编译器 C语言
【C++学习】类和对象 | 类的成员函数存放在哪里?| this指针 | 构造函数 | 析构函数 | 探索构造和析构函数的更多细节
【C++学习】类和对象 | 类的成员函数存放在哪里?| this指针 | 构造函数 | 析构函数 | 探索构造和析构函数的更多细节
149 0
|
9月前
|
编译器 C++
<c++> 类的构造函数与类的析构函数
<c++> 类的构造函数与类的析构函数
73 0
|
10月前
|
C++
C++ 继承,构造函数,析构函数(下)
C++ 继承,构造函数,析构函数
|
编译器 C++
【一、构造函数与析构函数】深度解析C++类的构造函数与析构函数调用机制
【一、构造函数与析构函数】深度解析C++类的构造函数与析构函数调用机制
333 0
继承中的构造与析构
继承中的构造与析构
51 0
|
存储 设计模式 安全
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
如何理解子类对象赋值给父类(深入理解动态绑定、静态绑定)
派生类和析构函数的构造规则
派生类和析构函数的构造规则
109 0