标签:
#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字节,前四字节是父类成员变量,后四字节是子类成员变量
由此看出,子类对父类是包含关系。具体是指包含父类成员变量。另外,构造函数没什么特殊的。其实就是类建立时自动调用的函数。去初始化类成员,也就是为成员变量申请内存。子类初始化,先调用父类构造方法初始化,父类成员变量。然后调用自己的,初始化自己成员变量。
标签:
原文地址:http://www.cnblogs.com/rixiang/p/5503518.html