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

反汇编探寻C++继承

时间:2016-05-18 00:06:34      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

#include <iostream>

class TableTennisPlayer
{
private:
    int id;
public:
    TableTennisPlayer(int id);
    void sayHi();
};

TableTennisPlayer::TableTennisPlayer(int n)
{
    id = n;
}

void TableTennisPlayer::sayHi()
{
    std::cout << "Hi,I am player" << id << std::endl;
}

class MasterPlayer :public TableTennisPlayer
{
private:
    int id;
public:
    MasterPlayer(int id);
    void fuck();
};

MasterPlayer::MasterPlayer(int n) :TableTennisPlayer(n)
{
    id = n;
}

void MasterPlayer::fuck()
{
    std::cout << "fuck you"  << std::endl;
}



int main(void)
{
    using std::cout;
    using std::cin;
    TableTennisPlayer player(1);
    MasterPlayer master(2);
    player.sayHi();
    master.sayHi();
    master.fuck();
    cout << sizeof(player) << std::endl;
    cout << sizeof(master) << std::endl;
    cin.get();
}

父类成员变量id在构造函数初始化。

子类也有成员变量id,在子类构造函数初始化。

反汇编代码看出,子类构造函数初始化子类时首先调用父类构造函数初始化父类--具体是初始化父类成员变量。

所以:

这是父类在内存中的存储 00 00 00 01 占4字节

技术分享

这是子类在父类的存储:

00 00 00 02 00 00 00 02  占8字节,前四字节是父类成员变量,后四字节是子类成员变量 

技术分享

由此看出,子类对父类是包含关系。具体是指包含父类成员变量。另外,构造函数没什么特殊的。其实就是类建立时自动调用的函数。去初始化类成员,也就是为成员变量申请内存。子类初始化,先调用父类构造方法初始化,父类成员变量。然后调用自己的,初始化自己成员变量。

反汇编探寻C++继承

标签:

原文地址:http://www.cnblogs.com/rixiang/p/5503518.html

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