1非静态数据与指向存放虚函数地址的虚函数表的指针放在类的object内,其他静态数据、静态函数、非静态函数独立在object之外,包括虚函数表。
2继承基类的子类对象包含基类信息与自己的信息。
3虚继承的子类对象,
对于一个类,没用用户声明的构造函数,编译器不会合成缺省构造函数,只合成以下四种有用的构造函数。没有的函数当然不需要合成,很合理。
Class A
{
public:
B b;
int i;
}
Class B
{
public:
B();
} 编译器会在A的构造函数里显式的调用B的构造函数
Class A
{
public:
inline A()
{
B::B();
}
B b;
int i;
} 如果程序员已经定义了A的构造函数,则编译器也会在构造函数开头插入调用B的构造函数的代码。
Class A
{
public:
A()
{
**B::B();**
i = 0;
}
B b;
}
编译器会合成构造函数来调用基类的构造函数,如果有多个基类,则根据声明顺序调用之。
编译器安插构造函数初始化虚函数表指针
同上类似,编译器需要初始化一些关于操作虚基类的代码。以后介绍。