继承中的对象模型
问题:从父类继承过来的成员,哪些属于子类对象中?
示例:
classBase
{
public:
intm_A;
protected:
intm_B;
private:
intm_C; //私有成员只是被隐藏了,但是还是会继承下去
};
//公共继承
classSon :publicBase
{
public:
intm_D;
};
voidtest01()
{
cout<<"sizeof Son = "<<sizeof(Son) <<endl;
}
intmain() {
test01();
system("pause");
return0;
}
利用工具查看:Visual Studio 的开发人员命令提示符
打开工具窗口后,定位到当前CPP文件的盘符
然后输入: cl /d1 reportSingleClassLayout查看的类名 所属文件名
效果如下图:
结论: 父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到
继承中构造和析构顺序
子类继承父类后,当创建子类对象,也会调用父类的构造函数
问题:父类和子类的构造和析构顺序是谁先谁后?
示例:
classBase
{
public:
Base()
{
cout<<"Base构造函数!"<<endl;
}
~Base()
{
cout<<"Base析构函数!"<<endl;
}
};
classSon : publicBase
{
public:
Son()
{
cout<<"Son构造函数!"<<endl;
}
~Son()
{
cout<<"Son析构函数!"<<endl;
}
};
voidtest01()
{
//继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反
Sons;
}
intmain() {
test01();
system("pause");
return0;
}
速记:构造时现有父亲后又儿子,析构顺序相反(白发送黑发)
总结:继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反