《C++反汇编与逆向分析技术揭秘》读书总结——从内存角度看继承

子类具备父类的所有成员数据和成员函数。在父类中声明为私有(private)的成员,虽然子类对象无法直接访问,但是在子类对象的内存结构中,父类私有的成员数据依然存在。C++语法规定的访问控制权限仅限于编译层面,由编译器进行语法检查。

 

子类对象在内存中的数据排列为:先安排父类的数据,后安排子类新定义的数据。内存结构等价于如下代码形式:

class CBase{...};             //父类定义代码略
class CDerive
{
    public:
        CBase m_Base;         //原来的父类CBase成为成员对象
        int m_nDerive;        //原来的子类派生数据
}

 

1、如果子类没有构造函数或析构函数,而其父类却需要构造函数与析构函数时,编译器会为该父类的子类提供默认的构造函数与析构函数,从而调用成员对象(指等价代码中的CBase类对象)的构造函数。

2、如果子类含有构造函数,而父类不存在构造函数,则分两种情况:如果父类中没有虚函数,也不存在构造祖先类的问题,则编译器不会为父类提供默认的构造函数,因为没有意义;如果父类含有虚函数,此时父类需要初始化虚表工作,因此编译器会为其提供默认的构造函数,以初始化虚标指针。

 

未完待续

本文是对原著的总结,非我原创,详情求购买原著。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值