C++中构造函数调用顺序

C++中若某类a从基类b、虚基类c派生而来,且该类中具有对象成员d,则在构造该类的对象时执行构造函数的顺序?

构造一个类的对象的一般顺序是:class a:public b, virtual public c{};
1.如果该类有直接或间接虚基类,先执行虚基类的构造函数;
2.如果该类有其他基类,按照他们在继承声明列表中出现的顺序分别执行构造函数,但是不再执行它们的虚基类的构造函数。
3.按照在类定义中出现的顺序,对派生类中新增的成员对象进行初始化。
4.执行构造函数函数体。
所以本题构造函数执行顺序为:c,b,d,a;

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 06:44:15

C++中构造函数调用顺序的相关文章

C++中类的构造函数调用顺序

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止.简而言之,对象是由"底层向上"开始构造的.因为,构造函数一开始构造时,总是要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时,如果无专门说明,就调用直接基类的默认构造函数.在对象析构时,其顺序正好相反. 下面的这个程序说明这个问题 总结下来,我们必须明确的是当一个类继承与基类,并且自身还包含有其他类的成员对象的时候,构造函

java初始化构造函数调用顺序

类初始化时构造函数调用顺序: (1)初始化对象的存储空间为零或null值:  (2)调用父类构造函数:  (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式:  (4)调用本身构造函数. 例子:public class Dollar extends Money{     Rmb r=new Rmb()     public Dollar(){      System.out.println("Dollar is construct!");     }     public st

C++多重继承构造函数调用顺序

//以典型实例说明 1 class B1{}; 2 class V1:public B1(); 3 class D1:virtual public V1(); 4 class B2{}; 5 class B3{}; 6 class V2:public B1,publicB2{}; 7 class D2:virtual public V2,public B3{}; 8 class M1{}; 9 class M2{}; 10 class X:public D1,public D2 11 { 12

C++中构造函数调用构造函数

今天想做道矩阵的题目时,却卡在一些编程细节上了,找了好久才发现原来是在构造函数处出了问题,然后上网百度了下,发现这篇文章说得很好:从一道题谈C++中构造函数调用构造函数,很棒! 还补充一点: 看来自己C++的基本功还有待提高啊~~

Unity3d中默认函数调用顺序(MonoBehaviour)

首先要明确的是MonoBehaviour是每个脚本的基类.每个Javascript脚本自动继承MonoBehaviour.使用C#或Boo时,需要显式继承MonoBehaviour. Unity是不支持多线程的,也就是说我们必须要在主线程中操作它,可是Unity可以同时创建很多脚本,并且可以分别绑定在不同的游戏对象身上,他们各自都在执行自己的生命周期感觉像是多线程,并行执行脚本的,它是如何执行的呢? 我们做一个小小的实验来验证它.如下图所示,在Hierarchy视图中创建三个游戏对象,在Proj

C++构造函数调用顺序

http%3A%2F%2F1.1%E6%96%B0%E5%BB%BA%E4%BC%9A%E8%AF%9D%E5%A4%B1%E8%B4%A5 http://index.ttplayer.com/songlist/502663901 http://list.mp3.baidu.com/songlist/502212235 http://list.mp3.baidu.com/songlist/502173428 http://list.mp3.baidu.com/songlist/502783840

Topology中各函数调用顺序

public class TabExample extends KJActivity { @BindView(id = R.id.bottombar_content1, click = true) public RadioButton mRbtn1; @BindView(id = R.id.bottombar_content2, click = true) private RadioButton mRbtn2; @Override public void setRootView() { setC

继承中的构造析构函数调用顺序

子类构造函数必须堆继承的成员进行初始化: 1. 通过初始化列表或则赋值的方式进行初始化(子类无法访问父类私有成员) 2. 调用父类构造函数进行初始化 2.1  隐式调用:子类在被创建时自动调用父类构造函数(只能调用父类的无参构造函数和使用默认参数的构造函数) 2.2  显示调用:在初始化列表调用父类构造函数(适用所有的父类构造函数) #include <iostream> #include <string> using namespace std; class PParent //

虚函数析构函数调用顺序

析构函数参考:http://blog.csdn.net/zengchen__acmer/article/details/22592195?utm_source=tuicool构造函数参考:http://www.cnblogs.com/nliao/archive/2012/02/05/2339175.html C++构造函数调用顺序: 1.创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类,多继承时,按照派生表的顺序依次调用): 2.如果类里面有成员类,成员类的构造函数优先被