zoukankan      html  css  js  c++  java
  • 继承和组合混搭的情况下,构造和析构函数的调用顺序

    继承和组合混搭的情况下:

            构造时,先调用父类的构造函数(如果父类还有父类,先执行父类的父类的构造函数,在执行父类的构造函数),再调用组合对象的构造函数,最后调用自己的构造函数;

            析构时,先调用自己的析构函数,再调用组合对象的析构函数,最后调用父类的析构函数(如果父类还有父类,先执行父类的析构函数,再执行父类的父类的析构函数)。

    例如下面一段代码:

     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

  • 相关阅读:
    【Leetcode_easy】720. Longest Word in Dictionary
    【Leetcode_easy】717. 1-bit and 2-bit Characters
    【Leetcode_easy】709. To Lower Case
    【Leetcode_easy】707. Design Linked List
    【Leetcode_easy】706. Design HashMap
    第38课 栈和队列的相互转化
    第7章 网络层协议(4)_IGMP协议
    第7章 网络层协议(3)_ARP协议
    第33课 双向循环链表的实现
    第32课 Linux内核链表剖析
  • 原文地址:https://www.cnblogs.com/jswu-ustc/p/8386278.html
Copyright © 2011-2022 走看看