MST
星途 面试题库

面试题:C++中虚基类关键字运用的基础要点考察

在C++中,声明虚基类使用什么关键字?请举例说明在一个简单的多重继承体系中,如何正确使用该关键字来避免菱形继承带来的数据冗余问题,并阐述虚基类子对象在内存中的布局特点。
49.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

在C++中,声明虚基类使用 virtual 关键字。

下面是一个简单的多重继承体系中使用 virtual 关键字避免菱形继承带来的数据冗余问题的示例:

class A {
public:
    int data;
};

class B : virtual public A {};

class C : virtual public A {};

class D : public B, public C {};

在上述代码中,BC 继承 A 时使用 virtual 关键字,这样在 D 类中,A 的子对象只会有一份,避免了数据冗余。

虚基类子对象在内存中的布局特点:

  • 虚基类子对象在派生类对象内存布局中通常有特殊的存储方式。在使用虚继承时,派生类对象内部会包含一个指向虚基类子对象的指针(虚基类指针)。
  • 这种布局方式使得无论虚基类被多少个中间派生类继承,最终派生类对象中都只有一份虚基类子对象,从而避免了菱形继承中数据冗余和访问歧义的问题。