处理C++继承时的最佳做法

Best practice when dealing with C++ inheritance

本文关键字:最佳 C++ 继承 处理      更新时间:2023-10-16

我想知道在下面的场景中,哪种做法是正确的/理想的,以及我是否有任何其他选择。

假设我有一个从另一个类继承的类。

class A { };
class B : public A { };
class C : public A { };

我维护一个 A 指针(基类(的映射。这些实际上是派生的 B 类或 C 类。

现在,假设我想对映射中的一个派生类指针执行操作 x。我看到有两种方法可以做到这一点。

1] 将基类类型转换为派生类并对其进行操作。这是一个好的做法吗?

2] 在基类中有一个可用的虚函数,这样你就可以在没有类型转换的情况下进行操作。我觉得这里的问题是某些方法可能真正属于派生类,而不是基类。我的意思是,适用于派生类 B 的方法可能不适用于派生类 C。在 A 上有一个纯虚函数让我感到不舒服。拥有纯虚拟,这是一种好的做法吗?或者可以做什么?

虚拟函数专门设计为通过指向基类的指针与基于或派生的对象一起工作。因此,如果所有类都支持操作 x((,您将获得运行时多态性。

但是,如果只有 C 支持 x((,那么指向对象 A 和 B 的指针需要什么行为?可能只是单独存储一系列指向 C 的指针?在这种情况下,您不需要继承。

您可以在类 A 中为 x(( 指定一些空实现 - 如果您不需要类 A 的对象,它可以是抽象的。这是通常的做法。

运行时强制转换具有时间成本,并且还涉及 if- 检查哪个具有性能开销。