码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 派生类对象的构造与析构过程

时间:2020-02-23 18:06:42      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:src   变量   sub()   turn   验证   过程   pac   技术   类的成员   

C++ 派生类对象的构造与析构过程

因为基类的成员变量和派生类的成员变量在内存中的连续的(下面程序会验证这一点),如下图所示:
技术图片
所以构造派生类对象的时候,构造成员变量的过程就像入栈一样:
技术图片 技术图片
那么很自然,派生类对象析构的时候就是出栈的过程,先进后出,后进先出:
技术图片技术图片

下边一个简单的程序验证这个结论:

#include <iostream>
using namespace std;

class base{
    int a;
public:
    base(const int& a):a(a){cout<<"基类构造函数\n";}
    void showAdd(){ cout<<"base类成员a的地址:\t"<<hex<<&a<<endl; }
    ~base(){cout<<"基类析构\n";}
};

class sub : public base {
    int b;
public:
    sub(const int& a, const int& b):base(a), b(b){cout<<"派生构造函数\n";}
    void showAdd() {base::showAdd(); cout<<"sub类成员变量b的地址:\t"<<hex<<&b<<endl; }
    ~sub(){cout<<"派生类析构\n";}
};

int main(){
    sub b(1,2);
    b.showAdd();
    return 0;
}
/*
输出结果:
基类构造函数
派生构造函数
base类成员a的地址:     0x7fffffffdb60
sub类成员变量b的地址:  0x7fffffffdb64
派生类析构
基类析构
*/

C++ 派生类对象的构造与析构过程

标签:src   变量   sub()   turn   验证   过程   pac   技术   类的成员   

原文地址:https://www.cnblogs.com/rookiezjz/p/12350623.html

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