C++学习基础十——子类构造函数与析构函数的执行

1.子类构造函数的执行:

先执行父类的构造函数,再执行成员对象的构造函数,最后执行自身的构造函数。

当继承多个类时,构造函数的 执行顺序与继承时的顺序 相同,而与子类构造函数调用父类构造函数的顺序无关。

 

2.子类析构函数的执行:

先执行自身析构函数,再执行成员对象的析构函数,最后执行父类的析构函数 。

当继承多个类时,父类析构函数的执行过程与构造函数的执行过程相反

 

3.代码如下:

  1 #include <iostream>
  2 #include <string>
  3 
  4 using namespace std;
  5 //子类构造函数的执行过程:先执行父类的构造函数,再执行成员对象的构造函数,最后执行自身的构造函数
  6 //当继承多个类时,构造函数的 执行顺序与继承时的顺序 相同,而与子类构造函数调用父类构造函数的顺序无关
  7 //子类析构函数的执行过程:先执行自身析构函数,再执行成员对象的析构函数,最后执行父类的析构函数 
  8 //当继承多个类时,父类析构函数的执行过程与构造函数的执行过程相反 
  9 
 10 class Base1
 11 {
 12 public:
 13     Base1(int k)
 14     {
 15         a = k;
 16         cout<<"Base1的构造函数被调用...."<<endl;
 17     }    
 18     void test()
 19     {
 20         cout<<a<<endl;
 21     }
 22     ~Base1()
 23     {
 24         cout<<"Base1的析构函数被调用...."<<endl;
 25     }
 26 private:
 27     int a;
 28 };
 29 
 30 class Base2
 31 {
 32 public :
 33     Base2(int k)
 34     {
 35         b = k;
 36         cout<<"Base2的构造函数被调用...."<<endl;
 37     }
 38     void test()
 39     {
 40         cout<<b<<endl;
 41     }
 42     ~Base2()
 43     {
 44         cout<<"Base2的析构函数被调用...."<<endl;
 45     }
 46 private:
 47     int b;    
 48 };
 49 
 50 class Base3
 51 {
 52 public:
 53     Base3()
 54     {
 55         c = 0;
 56         cout<<"Base3的默认构造函数被调用...."<<endl;
 57     }
 58     void test()
 59     {
 60         cout<<c<<endl;
 61     }
 62     ~Base3()
 63     {
 64         cout<<"Base3的析构函数被调用...."<<endl;
 65     }
 66 private:
 67     int c;    
 68 };
 69 
 70 class Demos
 71 {
 72 public:
 73     Demos(int k)
 74     {
 75         m = k;
 76         cout<<"Demos的构造函数被调用...."<<endl;
 77     }
 78     int getM()
 79     {
 80         return m;
 81     }
 82     ~Demos()
 83     {
 84         cout<<"Demos的析构函数被调用...."<<endl;
 85     }
 86 private:
 87     int m;    
 88 };
 89 
 90 class son:public Base1,public Base3,public Base2
 91 {
 92 public:
 93     son(int a,int b,int c,int l);
 94     void test();
 95     ~son();
 96 private:
 97     int s;
 98     Demos d;
 99 };
100 
101 son::son(int a,int b,int c,int l):Base1(a),Base2(b),s(c),d(l)
102 {
103     cout<<"son的构造函数被调用...."<<endl;
104 }
105 
106 void son::test()
107 {
108     Base1::test();
109     Base2::test();
110     Base3::test();
111     cout<<s<<endl;
112     cout<<d.getM()<<endl;
113 }
114 son::~son()
115 {
116     cout<<"son的析构函数被调用...."<<endl;
117 }
118 
119 int main()
120 {
121     cout<<"======子类构造函数的执行过程    start====="<<endl;
122     son son(1,2,3,4);
123     cout<<"======子类构造函数的执行过程    end====="<<endl;
124     son.test();
125     
126     cout<<"\n======子类析构函数的执行过程   ====="<<endl;
127     return 0;
128 }

执行结果如下图所示:

 

posted @ 2016-09-20 23:11  bky2016  阅读(984)  评论(0编辑  收藏  举报