-
15 votesanswersviews
为什么GoF建议在C模板方法模式实现中使用受保护(而非私有)的虚拟方法?
来自模板方法模式的四人帮: 值得注意的三个实施问题:使用C访问控制 . 在C中,模板方法调用的基本操作可以声明为受保护的成员 . 这确保了它们仅由模板方法调用 . 必须重写的原始操作被声明为纯虚拟 . 模板方法本身不应该被覆盖;因此,您可以使模板方法成为非虚拟成员函数 . “这确保了它们只能通过模板方法调用 . ”不是真的,不是吗?也可以从派生类调用原始方法(如果某些是虚拟的而不是纯虚拟的) ...