考虑以下基类:
class Base
{
public:
virtual ~Base(void);
virtual void foo(void);
virtual void bar(void) = 0;
}
现在假设我知道给定的类应该是 Base 的最派生类。我应该将函数声明为虚拟函数吗?最派生的类可以/将与 Base 多态地一起使用。
例如,我应该使用MostDerived1
orMostDerived2
吗?
class MostDerived1 : public Base
{
public:
~MostDerived1(void);
void foo(void);
void bar(void);
}
class MostDerived2 : public Base
{
public:
virtual ~MostDerived2(void);
virtual void foo(void);
virtual void bar(void);
}
我倾向于 MostDerived1,因为它最接近地模拟了程序员的意图:我不希望 MostDerived1 的另一个子类与 MostDerived1 多态地一起使用。
这个推理正确吗?除了显而易见的问题之外,我应该选择 MostDerived2 有什么好的理由there could be a >0% chance MostDerived2 should be used polymorphically with any deriving classes (class OriginalAssumptionWrong : public MostDerived2)
吗?
请记住MostDerived1
/MostDerived2
都可以与Base
.