深度探索C++对象模型读书笔记(1)
看到《深度探索C++对象模型》的第64页才开始做的笔记,这要是发现书中一个疑惑的地方所以前来和大家探讨一下
这是书中对C++中实现多态时内存的布局描述,其中包括两个类ZooAnimal和Bear
class ZooAnimal
{
ZooAnimal()
virtual ~ZooAnimal();
virtual void rotate();
protected:
int loc;
String name;
};
class Bear : public ZooAnimal
{
Bear();
~Bear();
void Rotate();
virtual void dance();
portected:
enum Dances { ... }
Dances dances_kowm;
int cell_block
}
可见Bear中只有一个虚函数表,此虚函数表在其继承层次最上层
同时我们可以看回书中44页对多态继承C++对象模型的描述
可以看到实现多重继承下虚函数表所在位置只与继承层次最上层的类对象有关,所有各层次中声明的虚函数都在继承层次最上层中虚函数表中可以找到。
PS:有些人可能疑惑在编译器(至少我在vs2012中是这样的)中虚函数表怎么只能看到最上层类中声明的虚函数,实际上虽然我们看不到其他层次上声明的虚函数但它们确实是存在于虚函数表里的。