`
kmplayer
  • 浏览: 497275 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于父类的构造的顺序

阅读更多
1,没有虚基类的情况:
#include <iostream>
#include <cstdio>
using namespace std;

class A
{
public:
    A()
    {
        cout << "A" << endl;
    };
};

class B : public A
{
public:
    B()
    {
        cout << "B" << endl;
    };
};

class C : public A
{
public:
    C()
    {
        cout << "C" << endl;
    };
};

class D : public B, C
{
public:
    D()
    {
        cout << "D" << endl;
    };
};

int main()
{
    B b; //输出: A B 先构造基类,再构造子类
    D d; //输出: A B A C D
    return 0;
}

(2)虚基类的情况:
#include <iostream>
#include <cstdio>
using namespace std;

class A
{
public:
    A()
    {
        cout << "A" << endl;
    };
};

class VB : virtual public A
{
public:
    VB()
    {
        cout << "VB" << endl;
    };
};

class VC : virtual public A
{
public:
    VC()
    {
        cout << "VC" << endl;
    };
};

class VD : public VB, VC
{
public:
    VD()
    {
        cout << "VD" << endl;
    };
};


int main()
{
    VD vd; //输出: A VB VC VD
    //虚基类的subobject总是在最深的地方最先被构造
    return 0;
}
分享到:
评论

相关推荐

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    子类对象构建调用父类的构造方法

    程序中描述了子类对象构建调用父类的构造方法,以及类变量和实例变量创建的不同过程

    EnumTest--构造顺序:父类、类成员变量、子类.zip

    构造函数顺序:父类、类成员变量、子类 析构正好反过来

    构造函数与静态块的执行顺序

    描述继承中子类与父类构造函数,静态块的执行顺序

    java面试题静态加载顺序构造方法

    Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 ...2、调用类的构造方法时先调用父类的构造方法,在调用子类的构造方法 3、类初始化时,先初始化类的属性成员,在执行构造方法。

    杰普学习corejava总结笔记

    调用父类构造器(注意调用父类构造器之前已经给父类的非静态的属性显示赋值,如果有显示赋值的话) 5.父类构造器执行完后,如果自己声明属性的同时有显示的赋值,那么进行显示赋值把默认值覆盖 6.执行匿名代码块 7....

    类加载顺序的代码执行结果

    先静态代码块,然后构造代码块,再是构造方法,然后方法里面的代码块按顺序...子类继承父类的时候,先执行父类的静态代码块,然后子类的静态代码块,然后父类的构造代码块和构造方法,再是子类的构造代码块和构造方法

    c#编写构造函数代码

    如果要说明到底调用哪一个父类构造, 则需在子类构造函数的首部的后面说明。 先根据子类对象实例化的形式决定到底调用哪一个子类的构造函数, 再根据该子类构造函数首部后面的声明来决定调用哪个父类的构造。 析构...

    由浅入深详解Java 类的实例化顺序

    在子类对象被实例化的过程中,变量、构造方法以及代码块三者的先后顺序为: 1. 父类的静态变量和静态代码块,按代码先后顺序执行 2. 子类的静态变量和静态代码块,按代码先后顺序执行 3. 父类的成员变量和普通...

    C#中子类调用父类的实现方法

    主要介绍了C#中子类调用父类的实现方法,通过实例逐步分析了类中初始化构造函数的执行顺序问题,有助于加深对C#面向对象程序设计的理解,需要的朋友可以参考下

    c# 类成员初始化顺序的特殊情况

    父类静态构造 父类实例字段 父类实例构造 子类实例构造 为什么说是“一般”初始化顺序呢?因为根据类结构的不同,类成员的初始化顺序并不是一成不变的。但是这个顺序是基础,可以推导出其他特殊的初始化顺序。...

    C#实验报告(实验报告一)

    (5)定义Student的带参构造函数,实现学生属性的初始化,部分属性调用父类构造函数来实现 (6)定义Student的非静态函数total和average求学生总成绩和平均成绩 (7)在Student中重写工作方法(学生的工作是学习),...

    C++类成员构造函数和析构函数顺序示例详细讲解

    即构造类时,会先构造其父类,然后创建类成员,最后调用本身的构造函数。 下面看一个例子吧 代码如下:class c{public: c(){ printf(“c\n”); }protected:private:}; class b {public: b(){ printf(“b\n”);}...

    预习资料 (1)1

    1.继承的访问控制方式 2.三种继承方式对子类访问的影响 3.父类如何设置子类的访问 1.父类的构造和析构 2.父类中的构造和析构执行顺序 3.继承中的构造函数

    Android代码块执行顺序分析总结

    子类、父类变量,代码块,以及构造方法的加载顺序,是我们在程序开发中时不时遇到的一个问题,也是比较容易混淆的。 基础准备: 变量: 成员变量(叫类变量、实例变量)和局部变量 方法: 成员方法和构造方法 ...

    java基础.txt

    面向对象 一种编程思想: ... 对父类对象构造的调用,如果有参则调用有参构造 而且this()必须放在构造方法中的第一行 static : 修饰方法 修饰属性 修饰代码块 final: 修饰属性 修饰方法 修饰类

    java对象初始化顺序验证示例

    以下这段小程序对调用对象构造函数时,父类构造函数、成员变量初始化函数,以及非静态初始化块调用顺序进行验证,不考虑静态成员及静态初始化块

    字节跳动、腾讯java面试.zip

    讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候,他们的执行顺序。 是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。 JAVA8 的 ...

    Java类初始化顺序

    执行父类的构造方法。没有继承默认继承的Object。Object会开辟一块内存,初始化所有数据为0、null、false等默认值 执行本类中的成员代码块。所有代码块是从上往下顺序执行的,所以代码块里面使用到的变量如果在块...

    Jave构造函数的继承执行顺序

    问题:子类继承父类,构造函数及公共属性的执行顺序是怎样的?  示例代码 &lt;SPAN xss=removed&gt;public class A extends C {  B b = new B();  static H h = new H();  static { ...

Global site tag (gtag.js) - Google Analytics