`
kmplayer
  • 浏览: 500833 次
  • 性别: 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#面向对象程序设计的理解,需要的朋友可以参考下

    Java 八股文背诵版(113 道)

    - 详细的先后顺序:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数 7. Java 代码块执行顺序: ...

    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”);}...

    JAVA经典面试题附答案

    类的实例化顺序是:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类构造函数、子类非静态变量、子类构造函数。 6. HashMap和ConcurrentHashMap的区别: HashMap是非线程安全的...

    JAVA面试题解惑系列(一)——类的初始化顺序-JAVA程序员JAVA工程师面试必看.pdf,这是一份不错的文件

    在 JAVA 中,类的初始化顺序可以分为四个阶段:静态变量、静态初始化块、变量、初始化块和构造器。其中,静态变量和静态初始化块的初始化顺序是最高的,接着是变量和初始化块,最后是构造器。 在了解类的初始化顺序...

    预习资料 (1)1

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

     java经典笔试题大全(50道含答案)

    - 构造方法的调用顺序:在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行。 3. 封装的特点: - 隐藏内部实现细节 - 增强程序的安全性 - 对外隐藏内部实现细节,提供...

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

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

    java基础.txt

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

Global site tag (gtag.js) - Google Analytics