概要
本文讲述在VS2012环境下,采用代码和图结合的方法,分析C++代码中不同继承方式的对象模型,以及从汇编角度分析虚拟继承编译器生成的虚基类表里的内容,不涉及虚函数。
继承分类:
1.单继承
一个子类只有一个直接父类
// 单继承 工人类 继承 人类
class Person
{
//...
};
class Worker : public Person
{
//...
};
2.多继承
一个子类有两个以上直接父类
// 多继承 农民工类分别继承 工人类 和 农民类
class Worker
{
// ...
};
class Farmer
{
// ...
};
class MigrantWorker : public Worker, public Farmer
{
// ..
};
继承关系大于两层
// 多继承 工人类继承 Person类 农民工类继承Worker类
class Person
{
// ...
};
class Worker : Person
{
// ...
};
class MigrantWorker : public Worker
{
// ..
};
两个子类继承同一个父类,而又有子类同时继承这两个子类。
// 菱形继承也叫钻石继承
// 工人类继承人类, 农民继承人类, 农民工类继承工人类和农民类
class Person
{
//...
};
class Worker : public Person
{
//...
};
class Framer : public Person
{
//...
};
class MigrantWorker : public Worker,public Framer
{
//...
};
派生类内存分布情况:
1.单继承
2.多继承
我