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

来源:互联网 发布:古墓丽影崛起帧数优化 编辑:程序博客网 时间:2024/05/17 12:19

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

#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的构造函数。有释放对象调用析构函数时,其顺序正好与构造函数的顺序相反。
原创粉丝点击