面试题答案
一键面试在C++中,声明虚基类使用 virtual
关键字。
下面是一个简单的多重继承体系中使用 virtual
关键字避免菱形继承带来的数据冗余问题的示例:
class A {
public:
int data;
};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {};
在上述代码中,B
和 C
继承 A
时使用 virtual
关键字,这样在 D
类中,A
的子对象只会有一份,避免了数据冗余。
虚基类子对象在内存中的布局特点:
- 虚基类子对象在派生类对象内存布局中通常有特殊的存储方式。在使用虚继承时,派生类对象内部会包含一个指向虚基类子对象的指针(虚基类指针)。
- 这种布局方式使得无论虚基类被多少个中间派生类继承,最终派生类对象中都只有一份虚基类子对象,从而避免了菱形继承中数据冗余和访问歧义的问题。