MST

星途 面试题库

面试题:C++中虚基类遵循原则的应用场景

在一个多层继承体系中,假设存在类A作为虚基类,类B和类C都从类A虚继承,类D又同时继承自类B和类C。请描述这种结构下,《C++设计虚基类应遵循的实用原则》中的哪条原则得到了体现,以及它如何避免数据冗余和二义性问题?
22.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 体现的原则
    • 共享唯一实例原则:在这种多层继承体系中,类A作为虚基类,使得从类A虚继承的类B和类C共享类A的唯一实例。
  2. 避免数据冗余和二义性问题的方式
    • 数据冗余
      • 如果不使用虚基类,类B和类C分别继承类A时,会各自拥有类A的一份数据成员副本。而使用虚基类后,无论类B和类C有多少个派生类(如类D同时继承B和C),都只有一份类A的数据成员实例,从而避免了数据冗余。
    • 二义性
      • 当类D同时继承类B和类C时,如果类A不是虚基类,在类D中访问类A的成员时会出现二义性,因为编译器无法确定应该使用类B继承过来的类A成员还是类C继承过来的类A成员。但通过虚基类,保证了类A只有一个共享实例,在类D中访问类A成员时就不会产生二义性。