码迷,mamicode.com
首页 > 其他好文 > 详细

子类构造、析构时调用父类的构造、析构函数顺序

时间:2016-08-23 13:07:41      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

析构函数调用的次序是先派生类的析构后基类的析构,也就是说在基类的的析构调用的时候,派生类的信息已经全部销毁了。

定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数。

原因:

  1. 派生类构造函数中的某些初始化可能是基于基类的,所以规定构造在类层次的最根处开始,而在每一层,首先调用基类构造函数,然后调用成员对象构造函数因为C++的成员变量是不会自动初始化的,只能使用初始化列表初始化(调用成员的构造函数)或在本层构造函数内初始化          参考:http://www.cnblogs.com/lidabo/p/3790606.html)。

  2. 如果没有显式调用基类的构造函数,会自动调用基类的无参构造函数。而如果基类只有带参数的构造函数,则会报错。不一定要显式的无参构造函数,可以显式调用基类带参数的构造函数。

#include<iostream>
using namespace std;
class Base{
public:
    Base(int c){cout<< "基类带参构造函数" << c << endl;}
    ~Base(){cout<<"基类析构" << endl;}
};
class Derived:public Base{
public:
    Derived(int c):Base(c) // 显式调用基类构造函数
    {
        cout<< "派生类带参构造函数" << c << endl;
    }
    ~Derived(){cout<<"派生类析构" << endl;}
};
int main()
{
    int i = 9;
    Derived d1(i);
    return 0;
}

输出结果:

基类带参构造函数9

派生类带参构造函数9

派生类析构

基类析构

转自:http://zhidao.baidu.com/link?url=fdBaMWX2-7zCBRQDow9LtkNGa9rRnvz6rhybNxvRc1tP8Puhx4HeKPfrdLHETk3DyFjnSHDvhA1daydeTc0x4RF0458i_r_rOWFoH3N5JcG

 

子类构造、析构时调用父类的构造、析构函数顺序

标签:

原文地址:http://www.cnblogs.com/liushui-sky/p/5798667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!