从没有虚拟方法的基类继承不好的做法?

Luc*_*ore 11 c++ inheritance

我回忆一下有关dynamic_cast的问题.dynamic_cast无法工作,因为基类没有虚方法.其中一个答案说,从没有虚拟方法的类派生通常意味着糟糕的设计.它是否正确?即使没有利用多态性,我仍然无法看到这样做的错误.

Mat*_* M. 8

这取决于我们所谈论的内容:

  • 对于Traits类(没有数据)它很好(std::unary_function想到)
  • 对于private继承(使用而不是组合从空基优化中受益)它也没关系

当您开始以多态方式处理此类Derived对象时,问题就来了.如果你曾经获得这样的位置,那么它就是明确的代码味道.

注意:即使上面提到的很好,你仍然提供了以多态方式使用该类的能力,因此你将自己暴露给微妙的错误.