我有一个带有公共(public)方法CGrandMothervirtual bool Compute()类,

virtual bool Compute()
{
    return false;
}

CGrandMother公开推导CMother,它不实现Compute。现在从CMother公开地实现C1C2virtual bool Compute()。现在virtual bool C1::Compute()virtual bool C2::Compute()分别做了许多分别适合于C1C2的工作,但也做了许多适合CMother的相同工作。现在有一个CFamily类,它具有一个指向CMother的指针,并且在代码中几乎所有地方Compute都通过以下形式的行来调用
ptrCMother->Compute();

我如何才能排除在CMotherC1中完成的与C2相关的常见内容,这样我就不必更改所有这些ptrCMother->Compute();行?

最佳答案

答案应该很简单。您说过“很多适合CMother的东西”。因此,您应该将它们分解为CMother的成员函数。由于似乎只有从CMother派生的类才需要该功能,因此应将新成员函数标记为“protected”。 @ 0x5453所说的是一种方法;但是我建议使用一个新函数,以便不使用公共(public)方法CMother::Compute。可能还有另一个CMother子类未实现Compute,而是依靠CMother::Compute来完成某些操作。

07-24 21:23