处理C ++继承时的最佳实践

时间:2018-06-13 13:46:29

标签: c++ inheritance

我想知道在下面的场景中,哪种做法是正确/理想的,如果我有其他选择。

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

class A { };

class B : public A { };

class C : public A { };

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

现在,我想在地图中的一个派生类指针上执行x操作。我看到有两种方法可以做到。

1]将基类类型转换为dervied类并对其进行操作。这是一个好习惯吗?

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

1 个答案:

答案 0 :(得分:1)

虚拟函数是专门设计用于通过指向基类的指针来使用基于或派生的对象。因此,如果所有类都支持操作x()。

,那么您将获得运行时多态性

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

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

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