C++多重继承中构造函数和析构函数调用顺序举例

//多重继承
#include <iostream>
using namespace std;

class A
{
public:
    A()
    {
        cout<<"A基类构造A::A()"<<endl;
    }
    ~A()
    {
        cout<<"A基类析构A::~A()"<<endl;
    }

};

class B:public A
{
public:
    B()
    {
        cout<<"B子类构造B:B()"<<endl;
    }
    ~B()
    {
        cout<<"B子类析构B:~B()"<<endl;
    }

};

class C:public A
{
public:
    C()
    {
        cout<<"C子类构造C::C()"<<endl;
    }
    ~C()
    {
        cout<<"C子类析构C::~C()"<<endl;
    }

};

class D:public B,public C
{
public:
    D()
    {
        cout<<"D孙子类构造D::D()"<<endl;
    }
    ~D()
    {
        cout<<"D孙子类析构D::~D()"<<endl;
    }

};

int main(int argc, char *argv[])
{
    D d;

    return 0;
}

则可以看出构造顺序A->B->A->C-D;析构顺序相反。

时间: 2024-10-10 01:31:04

C++多重继承中构造函数和析构函数调用顺序举例的相关文章

C++类的继承中构造函数和析构函数调用顺序例子

/*当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止.简而言之,对象是由“底层向上”开始构造的.因为,构造函数一开始构造时,总是要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时,如果无专门说明,就调用直接基类的默认构造函数.在对象析构时,其顺序正好相反.下面的这个程序说明这个问题*///-----------------------------------------------

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

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

c++深/浅拷贝 &amp;&amp; 构造函数析构函数调用顺序练习题

1.深/浅拷贝 编译器为我们提供的合成拷贝构造函数以及合成的拷贝赋值运算符都是浅拷贝.浅拷贝只是做简单的复制,如果在类的构造函数中new出了内存,浅拷贝只会简单的复制一份指向该内存的指针,而不会再开辟内存,这就会使得程序运行出现内存错误,如此,当对象析构的时候,会delete多次同一块内存区域,发生错误.这也就是为什么,必要的时候需要我们自己编写拷贝构造函数和重载赋值运算符,让它变成深拷贝,深拷贝即在copy指针的时候不是简单做值copy,而是还要开辟内存. 2.构造函数析构函数调用顺序练习题

构造函数、析构函数调用虚函数

昨天笔试的时候碰到一个很有意思的题目,大体如下: class Parent { public:     Parent()     {         doit();     }     ~Parent()     {         doit();     }     virtual void doit()     {         cout << "I'm Parent!" << endl;     } }; class Child: public Pare

虚函数析构函数调用顺序

析构函数参考: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.如果类里面有成员类,成员类的构造函数优先被

c++构造函数析构函数调用顺序

1 #include <iostream> 2 using namespace std; 3 class A 4 { 5 public: 6 A () 7 { 8 cout<<"A 构造 "<<endl; 9 } 10 virtual ~A() // 定义虚析构函数 导致原来析构顺序发生变化 11 { 12 cout<<"A 析构 "<<endl; 13 } 14 15 }; 16 class B : pu

c++派生类中构造函数和析构函数执行顺序、判断对象类型、抽象类、虚函数

一. 代码: 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<iostream> 5 using namespace std; 6 class A 7 { 8 public: 9 int a,b; 10 A(); 11 A(int x,int y); 12 ~A(); 13 }; 14 A::A() 15 { 16 printf("调用A类构造函数\

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

http://blog.csdn.net/xw13106209/article/details/6899370 1.参考文献 参考1: C++继承中构造函数.析构函数调用顺序及虚函数的动态绑定 参考2: 构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 参考3: C++构造函数与析构函数的调用顺序 2.构造函数.析构函数与拷贝构造函数介绍 2.1构造函数 构造函数不能有返回值 缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 创建一个对象

派生类的构造函数学习之调用顺序

派生类构造函数的一般格式为: 记:B为派生类 ,A为基类 B::B(<构造函数总参数表>):A(<参数表1>),<子对象名>(<参数表2>),...... 派生类构造函数调用顺序为:基类构造函数.子对象构造函数(如果有).派生类构造函数. 对象生命周期结束后,会执行析构函数,析构函数调用顺序和构造函数调用顺序相反. 原文地址:https://www.cnblogs.com/strivingforever/p/8267309.html