首页 > 代码库 > C++学习基础十——子类构造函数与析构函数的执行
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 }
执行结果如下图所示:
C++学习基础十——子类构造函数与析构函数的执行
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。