zoukankan      html  css  js  c++  java
  • 关于单继承类的构造与析构顺序

    单继承派生类只有一个基类或虚基类,根据4个优先级别容易确定构造顺序:
    首先调用派生类虚基类的构造函数;无论虚基类的构造函数列出否总会被执行; 
    接着调用派生类基类的构造函数,无论基类的构造函数列出与否总会被执行;
    然后按照派生类数据成员声明的顺序,依次初始化数据成员或调用相应构造函数,对象成员无论列出与否总会被构造;
    在然后最后执行派生类的构造函数体。

    析构是构造的逆序,所以反过来就行。

       

    #include <iostream.h>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    class A{
        int  a;
    public:
        A (  ):a (8)
        { cout<<a; } //非const成员a,可在函数体内再次对a赋值
        A (int  x):a (x)
        { cout<<a;  }
        ~A ( ) { cout<<a;  }
    };
    class B:A{ //私有继承,等价于class B: private A{
        int   b, c;
        const  int  d;  //B定义有只读成员d, 故B必须定义构造函数
        A   x,  y,z;
    public://按声明顺序初始化A、b、c、d、x、y、z。A、z可不列出
        B (int v) :b (v),  y (b+2),  x (b+1),  d (b),  A (v) {
            c=v;     cout<<b<<c<<d;   cout<<"C";    //b,  c可再次赋值
        }
        ~B ( )   { cout<<"D";  }
    };
    void main (void)
    {
      B   z(1)  ;
      //system("pause");
     //return 0;
     }

     

      构造时:

      首先输出  1,调用有参构造函数,构造A(v)//首先构造基类

    构造数据成员  b c  不输出

               构造  x y  调用有参构造函数  输出  2 3

               构造   z    调用无参构造函数  输出  8

               输出   cout那一句  1 1  1 分别是b c d 

               输出   C

               输出   D  析构了 b c  d

               输出   8 3 2 1 析构了  z  y  x  和基类

               析构和构造正好是逆序。

               

               

  • 相关阅读:
    CSS 兼容性调试技巧
    CSS 常用的兼容性调试技巧
    全局CSS设置
    CSS 盒子模型
    CSS表格属性
    HTML引入CSS的方法
    CSS 定位
    CSS display overflow 属性 cursor光标类型
    CSS 继承和优先级
    沟通表达
  • 原文地址:https://www.cnblogs.com/cs1003/p/2825275.html
Copyright © 2011-2022 走看看