`
kmplayer
  • 浏览: 508662 次
  • 性别: 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中的继承(子类调用父类构造方法还不懂).doc

    ### Java中的继承(子类调用父类构造方法) #### 一、继承的基本概念 Java是一种支持面向对象编程的语言,其中“继承”是一项核心特性。继承允许创建一个新的类(称为子类或派生类),该类继承了现有类(称为父类...

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

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

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

    标题"EnumTest--构造顺序:父类、类成员变量、子类"指的是枚举实例的构造过程,它遵循以下顺序: 1. **父类构造器**:首先,如果枚举类继承了其他类,那么会先调用父类的构造器。这是面向对象编程中的一个基本规则...

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

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

    Java序列化中子类、父类构造函数问题实例分析

    Java序列化中子类、父类构造函数问题实例分析 本文主要介绍了Java序列化...同时也展示了在反序列化时父类构造函数的调用顺序。这些知识点对于Java开发人员来说非常重要,可以帮助他们更好地理解和使用Java序列化机制。

    构造函数借鉴.pdf

    3. 父类构造函数的调用:在子类的构造函数中,如果没有显式调用父类的构造函数,那么系统会默认调用父类的无参构造函数。如果父类没有无参构造函数,编译器会报错,因为子类无法执行必要的初始化步骤。 4. 显式调用...

    python 子类调用父类的构造函数实例

    在Python编程语言中,子类继承父类时,有时候我们需要在子类的构造函数中调用父类的构造函数,以便初始化父类的属性。这通常发生在子类扩展父类的功能,但还需要保留父类的一些基本行为时。下面将详细讨论如何在...

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

    在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    java构造方法

    但如果父类中没有无参构造方法,或者需要在子类中传递特定参数到父类构造方法,则需要使用`super()`关键字显式调用父类的构造方法。 #### 六、构造方法调用的顺序 在类的继承结构中,构造方法的调用顺序遵循自底...

    再次详细说明在继承中的程序执行顺序,子类与父类到底哪个先执行

    综上所述,程序执行顺序的基本原则是:首先初始化并执行父类的构造器、静态和实例初始化块,然后执行子类的构造器、实例初始化块。最后,当通过子类对象调用方法时,优先执行子类覆盖的方法。理解这一顺序对于编写可...

    Java构造函数的继承问题[收集].pdf

    - 子类的构造函数中,如果没有显式使用`super`调用父类构造函数,Java会自动调用父类的无参数构造函数。但如果父类没有无参数构造函数,子类构造函数必须使用`super`调用父类的某个构造函数,否则编译会出错。 6. ...

    Java类的基本运行顺序

    6. **父类构造器输出**:执行父类构造器中的`System.out.println`语句(第15行)。 7. **父类构造器结束**:完成父类构造器的执行。 8. **返回子类构造器**:完成`Test`类构造器的执行。 9. **静态方法执行**:回到`...

    浅谈Java中父类与子类的加载顺序详解

    以下是Java中父类与子类加载顺序的详细解释: 1. **静态初始化**: - 首先,JVM会加载类的静态部分。这意味着先加载所有静态变量的初始化,并执行静态初始化块(如果有的话)。在给定的例子中,无论父类还是子类,...

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

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

    Java4Android 19_子类实例化过程

    当一个子类实例化时,其实例化过程涉及到多个步骤,这些步骤不仅包括自身的构造器执行,还包括对父类构造器的调用。下面将详细阐述Java中子类实例化的过程及其相关知识点。 首先,子类实例化时会先调用父类的构造器...

    c#切换执行程序顺序,有些中级开发小伙伴还是搞不太明白在继承父类以及不同场景实例化的情况下,父类和子类的各种方法的执行顺序到底是

    C#编程语言中,类和对象的构造及方法执行顺序是一个关键的概念,尤其在涉及到继承、构造函数、虚方法和重写时。以下是对给定场景的详细解释: 1. **场景一:只实例化父类** 当我们创建一个`A`类型的对象时,只会...

    构造函数的继承问题 笔记

    3. **构造函数重载与父类构造函数的选择**:如果父类中有多个构造函数,子类可以通过`super()`后跟相应的参数列表来选择调用哪一个父类构造函数。 例如: ```java class Base { public Base() { System.out....

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    4. 父类构造方法执行完毕后,执行当前类的实例构造方法。 5. 最后,执行当前类的非静态代码块(如果有)。 这个过程确保了对象在被创建之前,其类的静态属性和父类的静态属性已经被正确初始化。同时,通过构造方法...

    构造函数继承.关于java

    如果`BaseClass`中有多个构造函数,我们可以使用`super(param)`来指定调用哪个父类构造函数。 ```java class BaseClass { public BaseClass() { System.out.println("Base Class Default Constructor"); } ...

    C++类继承之子类调用父类的构造函数的实例详解

    本实例主要探讨了如何在子类中调用父类的构造函数,以便正确初始化父类的数据成员。 首先,我们来看父类`HttpUtil`的定义。`HttpUtil`包含了几个私有成员变量,如`hInternet`, `hConnect`, `hRequest`,以及一个...

Global site tag (gtag.js) - Google Analytics