继承和组合混搭的情况下:
构造时,先调用父类的构造函数(如果父类还有父类,先执行父类的父类的构造函数,在执行父类的构造函数),再调用组合对象的构造函数,最后调用自己的构造函数;
析构时,先调用自己的析构函数,再调用组合对象的析构函数,最后调用父类的析构函数(如果父类还有父类,先执行父类的析构函数,再执行父类的父类的析构函数)。
例如下面一段代码:
1 #include<iostream> 2 using namespace std; 3 4 class Object 5 { 6 public: 7 Object(int _x,int _y):x(_x),y(_y){cout<<"Object的构造函数"<<x<<" "<<y<<endl;} 8 ~Object(){cout<<"Object的析构函数"<<x<<" "<<y<<endl;} 9 10 private: 11 int x; 12 int y; 13 }; 14 15 16 17 18 class Parent:public Object 19 { 20 public: 21 Parent(int _a,int _b):Object(1,2),a(_a),b(_b){cout<<"Parent的构造函数"<<endl;} 22 ~Parent(){cout<<"Parent的析构函数"<<endl;} 23 24 private: 25 int a; 26 int b; 27 }; 28 29 class Child:public Parent 30 { 31 public: 32 Child(int _a,int _b,int _c):Parent(_a,_b),obj(3,4),c(_c) 33 { 34 cout<<"Child的构造函数"<<endl; 35 } 36 ~Child(){cout<<"Child的析构函数"<<endl;} 37 38 protected: 39 Object obj; 40 41 private: 42 int c; 43 }; 44 45 int main() 46 { 47 Child c(1,2,3); 48 49 return 0; 50 }
代码的执行结果是:
Object的构造函数1 2
Parent的构造函数
Object的构造函数3 4
Child的构造函数
Child的析构函数
Object的析构函数3 4
Parent的析构函数
Object的析构函数1 2