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

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

目录
相关文章
|
数据采集 Java 数据库
大学里面抢课到底可行吗?我来给你彻底说明白
大学里面抢课到底可行吗?我来给你彻底说明白
|
编解码 数据可视化 数据挖掘
空间单细胞|Slide-seq分析、可视化与整合(1)
空间单细胞|Slide-seq分析、可视化与整合(1)
|
数据采集 数据处理 持续交付
CI/CD笔记.Gitlab系列.`gitlab-ci.yml`中的头部关键字
CI/CD笔记.Gitlab系列.`gitlab-ci.yml`中的头部关键字
169 0
|
Dart IDE API
Flutter Riverpod 状态管理上手技巧分享
时代在进步 Riverpod 作为一个优秀的状态管理,猫哥也开始做些技术调研。今天会写两个例子,计数器、拉取数据。
407 1
Flutter Riverpod 状态管理上手技巧分享
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
1757 0
|
存储 分布式计算 NoSQL
大数据编程技术基础实验七:HBase实验——部署HBase
大数据技术基础实验七,.掌握HBase集群安装部署及HBase Shell的一些常用命令的使用。
1025 0
大数据编程技术基础实验七:HBase实验——部署HBase
|
Linux 网络安全 数据安全/隐私保护
|
开发框架 前端开发 JavaScript
前后端分离,Asp.net core webapi 如何配置跨域
前后端分离,Asp.net core webapi 如何配置跨域
427 0
|
机器学习/深度学习 数据采集 人工智能
ERP系统中的人工智能与机器学习应用:提升企业智能化管理
【7月更文挑战第29天】 ERP系统中的人工智能与机器学习应用:提升企业智能化管理
1863 0
|
存储 NoSQL 大数据
【MongoDB】GridFS机制
【4月更文挑战第2天】【MongoDB】GridFS机制