重构 Class 层次结构的最佳方式

Best Way to Refactor Class Hierarchy

我有一个 class CGrandMother 有一个 public 方法 virtual bool Compute()

virtual bool Compute()
{
    return false;
}

CGrandMother 派生 publicly CMother 未实现 Compute。现在从 CMother 派生出 public 实现 virtual bool Compute()C1C2。现在 virtual bool C1::Compute()virtual bool C2::Compute() 分别做了很多适合 C1C2 的事情,但也做了很多适合 CMother 的相同事情。现在有一个 class CFamily 作为成员有一个指向 CMother 的指针并且几乎在代码的任何地方 Compute 都是通过形式

的行调用的
ptrCMother->Compute();

我怎样才能找出在 C1C2 中完成的与 CMother 相关的常见内容,这样我就不必更改所有这些 ptrCMother->Compute(); 行?

答案应该很简单。你说的是"a lot of identical stuff proper to CMother"。所以你应该把它们分解成 CMother 的成员函数。由于看起来只有从 CMother 派生的 classes 才需要该功能,因此您应该标记新成员函数 "protected"。 @0x5453 说的是一种方式;但我建议使用一个新函数,以便单独使用 public 方法 CMother::Compute。可能还有另一个 child class 的 CMother 没有实现计算并依赖 CMother::Compute 来做某些事情。