10.7.4 虚基类的情况
对图10.11表示的继承结构来说,如果使用类A虚拟派生出类B和类C,则在类D的对象中只有一份类A对象的副本,类D对象的内存分布与图10.12有所不同。此时,派生类对象d的地址可以直接赋给类A指针,不需要指明路径和强制转换,如下所示。
pA=&d;由类D对象对类A对象的赋值和初始化引用也是合法的,如下所示。 a=d; A&rA=d;需要特别注意的是,相反的转换是不允许的,即使添加了全部路径和强制转换也不可以,如下所示。 DppD=(D)(B*)pA;//非法
上述语句会产生编译错误,这是因为系统在为类D对象分配内存时间,虚基类中的数据成员在派生类对象中的布局和非虚基派生时有所不同,所以,不能将指向虚基类的指针(或引用)置回指向派生类。