基础备忘:多重继承的构造函数和析构函数

本文详细解析了多继承背景下构造函数和析构函数的执行顺序,强调基类间的执行顺序遵循声明时从左到右的原则,与构造函数中的次序无关。通过实例代码演示了创建派生类对象时各基类成员的调用过程及对象销毁时的逆序执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多继承构造函数和析构函数的执行顺序与单继承相同,但应强调的是,基类之间的执行顺序是严格按照声明时从左到右的顺序来执行的,与他们在定义派生类构造函数中的次序无关。例如:

#include<iostream>
using namespace std;
class Base1{
      int x1;
      public:
             Base1(int y1)
             {
                       x1=y1;
                       cout<<"Constructing Base1, x1= "<<x1<<endl;
                       }
             ~Base1()
             {
                     cout<<"Destructing Base1"<<endl;
                     }
      };
class Base2
{
      int x2;
      public:
             Base2(int y2)
             {
                       x2=y2;
                       cout<<"Constructing Base2, x2= "<<x2<<endl;
                       }
             ~Base2()
             {
                     cout<<"Destructing Base2"<<endl;
                     }
      };
class Base3
{
      public:
             Base3()
             {
                       cout<<"Constructing Base3"<<endl;
                       }
             ~Base3()
             {
                     cout<<"Destructing Base3"<<endl;
                     }
      };
class Derived: public Base2,public Base1,public Base3//基类之间的执行顺序是严格按照声明时从左到右的顺序来执行的,与他们在定义派生类构造函数中的次序无关。 
{
      private:
              Base1 ob1;
              Base2 ob2;
              Base3 ob3;
      public:
             Derived(int x,int y,int z,int v):Base1(x),Base2(y),ob1(z),ob2(v)//对于使用默认构造函数的基类或对象成员(Base3,ob3),可以不写在参数表达式表里 
             {
                  cout<<"Constructing Derived"<<endl;
                         }
      }; 
int main()
{
    Derived ob(1,2,3,4);//Derived(1,2,3,4);
    system("pause");
    } 

上例中,创建派生类的对象ob时,依次调用基类Base2,Base1,Base3,最后调用派生类Derived的构造函数。有释放对象调用析构函数时,其顺序正好与构造函数的顺序相反。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值