构造函数与析构函数

我不是女神ヾ 2022-05-24 12:27 452阅读 0赞
  1. /*构造函数--组合和继承*/
  2. /*一般来说子类不继承父类的构造函数*/
  3. #include <iostream>
  4. using namespace std;
  5. class Base1{
  6. public:
  7. Base1(int i){ //基类Base1,构造函数有参
  8. cout << "Constructing Base1 " << i << endl;
  9. }
  10. };
  11. class Base2{
  12. public:
  13. Base2(int j){ //基类Base2,构造函数有参
  14. cout << "Constructing Base2 " << j << endl;
  15. }
  16. };
  17. class Base3{
  18. public:
  19. Base3(){ //基类Base3,构造函数无参
  20. cout << "Constructing Base3* " << endl;
  21. }
  22. };
  23. class Derived:public Base2, public Base1, public Base3{ //注意基类名继承的顺序
  24. public:
  25. Derived(int a, int b, int c, int d):Base1(a), member2(d), member1(c), Base2(b){}
  26. private:
  27. Base1 member1;
  28. Base2 member2;
  29. Base3 member3;
  30. };
  31. int main(){
  32. Derived obj(1, 2, 3, 4);//执行时候先初始化基类的构造函数,执行顺序按照派生类公有继承基类的顺序
  33. return 0; //所以先执行Base2(2), 再执行Base1(1),最后执行无参的Base3;
  34. } //再者初始化私有成员类的对象,按照member1(3), member2(4),member3的顺序

70

  1. /*构造函数的析构函数--和构造函数一样不被子类继承*/
  2. #include <iostream>
  3. using namespace std;
  4. class Base1{
  5. public:
  6. Base1(int i){ //基类Base1,构造函数有参
  7. cout << "Constructing Base1 " << i << endl;
  8. }
  9. ~Base1(){
  10. cout << "Destructing Base1" << endl;
  11. }
  12. };
  13. class Base2{
  14. public:
  15. Base2(int j){ //基类Base2,构造函数有参
  16. cout << "Constructing Base2 " << j << endl;
  17. }
  18. ~Base2(){
  19. cout << "Destructing Base2" << endl;
  20. }
  21. };
  22. class Base3{
  23. public:
  24. Base3(){ //基类Base3,构造函数无参
  25. cout << "Constructing Base3* " << endl;
  26. }
  27. ~Base3(){
  28. cout << "Destructing Base3" << endl;
  29. }
  30. };
  31. class Derived:public Base2, public Base1, public Base3{ //注意基类名继承的顺序
  32. public:
  33. Derived(int a, int b, int c, int d):Base1(a), member2(d), member1(c), Base2(b){}
  34. private:
  35. Base1 member1; //析构函数首先在结束时析构本类的对象成员,但执行顺序和构造函数相反,从最后的member3~member1这个顺序执行
  36. Base2 member2;//然后再析构基类的对象,析构的顺序按照公有继承顺序的反方向,先Base3再Base1最后Base2
  37. Base3 member3;
  38. };
  39. int main(){
  40. Derived obj(1, 2, 3, 4);//执行时候先初始化基类的构造函数,执行顺序按照派生类公有继承基类的顺序
  41. return 0; //所以先执行Base2(2), 再执行Base1(1),最后执行无参的Base3;
  42. } //再者初始化私有成员类的对象,按照member1(3), member2(4),member3的顺序

70 1

发表评论

表情:
评论列表 (有 0 条评论,452人围观)

还没有评论,来说两句吧...

相关阅读

    相关 构造函数函数

    构造函数和析构函数是面向对象编程中的重要概念,它们在对象的创建和销毁过程中起着关键作用。构造函数用于初始化对象的状态,而析构函数则负责在对象被销毁时执行清理操作。在本文中,我们

    相关 C++构造函数函数

    创建一个对象时,常常需要作某些初始化的工作,例如对数据成员赋初值。 注意,类的数据成员是不能在声明类时初始化的。如果一个类中所有的成员都是公用的,则可以在定义对象时对数据成

    相关 构造函数函数

    构造函数      先看看构造函数的调用顺序规则,只要我们在平时编程的时候遵守这种约定,任何关于构造函数的调用问题都能解决;构造函数的调用顺序总是如下: 1.基类构

    相关 构造函数函数

    构造函数      先看看构造函数的调用顺序规则,只要我们在平时编程的时候遵守这种约定,任何关于构造函数的调用问题都能解决;构造函数的调用顺序总是如下: 1.基类构

    相关 拷贝构造函数函数

    一、拷贝构造函数 (一)、何为拷贝? 拷贝一词来源于英文中的copy,译为:抄写,复制,复制品。将原有物件,按照同样式的在来一份。 \\举个栗子: 饭点到了,和