zoukankan      html  css  js  c++  java
  • 3.8 C++继承机制下的析构函数

    参考:http://www.weixueyuan.net/view/6365.html

    总结:

      构造函数的执行顺序是按照继承顺序自顶向下的,从基类到派生类,而析构函数的执行顺序是按照继承顺序自下向上,从派生类到基类。  

      因为每一个类中最多只能有一个析构函数,因此调用的时候并不会出现二义性,因此析构函数不需要显式的调用。
     
     
    创建派生类对象时构造函数的调用顺序是按照继承顺序,先执行基类构造函数,然后再执行派生类的构造函数。但是对于析构函数,其调用顺序是正好相反的,即先执行派生类的构造函数,然后再执行基类的构造函数。

    例1:
    #include <iostream>
    using namespace std;
    
    class A
    {
    public:
        A(){cout<<"A constructor"<<endl;}
        ~A(){cout<<"A destructor"<<endl;}
    };
    
    class B: public A
    {
    public:
        B(){cout<<"B constructor"<<endl;}
        ~B(){cout<<"B destructor"<<endl;}
    };
    
    class C: public B
    {
    public:
        C(){cout<<"C constructor"<<endl;}
        ~C(){cout<<"C destructor"<<endl;}
    };
    
    int main()
    {
        C test;
        return 0;
    }

    在本例中定义了三个类,C类继承自B类,B类继承自A类。在每个类中定义默认构造函数和析构函数。在主函数中我们定义了C类的一个对象,创建对象时各个类的构造函数会被调用,之后退出程序,各类的析构函数会被逐一调用。程序运行结果如下:
    A constructor
    B constructor
    C constructor
    C destructor
    B destructor
    A destructor

    程序运行结果很好地说明了构造函数和析构函数的执行顺序。构造函数的执行顺序是按照继承顺序自顶向下的,从基类到派生类,而析构函数的执行顺序是按照继承顺序自下向上,从派生类到基类。

    因为每一个类中最多只能有一个析构函数,因此调用的时候并不会出现二义性,因此析构函数不需要显式的调用。
     
  • 相关阅读:
    表单的编辑添加和删除 .removeClass() .append() .preAll() .attr('b') document.createElement()
    菜单与内容下拉jQuery
    s2选择框的全选和反选jQuery
    作用域
    当前触发事件的两种方式(onclick) 和 ('id') 获取
    词义分析
    Qt下载地址
    字符集(编码)转换_Qt532_QString
    字符集(编码)转换_Windows
    字符集(编码)转换_Linux
  • 原文地址:https://www.cnblogs.com/yongpan/p/7631858.html
Copyright © 2011-2022 走看看