重构 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()
的 C1
和 C2
。现在 virtual bool C1::Compute()
和 virtual bool C2::Compute()
分别做了很多适合 C1
和 C2
的事情,但也做了很多适合 CMother
的相同事情。现在有一个 class CFamily
作为成员有一个指向 CMother
的指针并且几乎在代码的任何地方 Compute
都是通过形式
的行调用的
ptrCMother->Compute();
我怎样才能找出在 C1
和 C2
中完成的与 CMother
相关的常见内容,这样我就不必更改所有这些 ptrCMother->Compute();
行?
答案应该很简单。你说的是"a lot of identical stuff proper to CMother"。所以你应该把它们分解成 CMother 的成员函数。由于看起来只有从 CMother 派生的 classes 才需要该功能,因此您应该标记新成员函数 "protected"。 @0x5453 说的是一种方式;但我建议使用一个新函数,以便单独使用 public 方法 CMother::Compute。可能还有另一个 child class 的 CMother 没有实现计算并依赖 CMother::Compute 来做某些事情。
我有一个 class CGrandMother
有一个 public 方法 virtual bool Compute()
virtual bool Compute()
{
return false;
}
从 CGrandMother
派生 publicly CMother
未实现 Compute
。现在从 CMother
派生出 public 实现 virtual bool Compute()
的 C1
和 C2
。现在 virtual bool C1::Compute()
和 virtual bool C2::Compute()
分别做了很多适合 C1
和 C2
的事情,但也做了很多适合 CMother
的相同事情。现在有一个 class CFamily
作为成员有一个指向 CMother
的指针并且几乎在代码的任何地方 Compute
都是通过形式
ptrCMother->Compute();
我怎样才能找出在 C1
和 C2
中完成的与 CMother
相关的常见内容,这样我就不必更改所有这些 ptrCMother->Compute();
行?
答案应该很简单。你说的是"a lot of identical stuff proper to CMother"。所以你应该把它们分解成 CMother 的成员函数。由于看起来只有从 CMother 派生的 classes 才需要该功能,因此您应该标记新成员函数 "protected"。 @0x5453 说的是一种方式;但我建议使用一个新函数,以便单独使用 public 方法 CMother::Compute。可能还有另一个 child class 的 CMother 没有实现计算并依赖 CMother::Compute 来做某些事情。