代码场景如下:有没有办法强制调用重写的方法?
class ParentClass {
void foo();
virtual void doSomething() { foo(); }
};
class ChildClass : public ParentClass {
virtual void doSomething();
};
现在,有没有办法来迫使子类调用父类的DoSomething的()?假设调用foo()
非常重要,并且在调用doSomething()
时应始终调用它。孩子班当然可以拨打ParentClass::doSomething()
,但它似乎有点“风险”,因为它没有执行。
我想出了一个“脏”的解决方案,它是这样的:
class ParentClass {
void foo();
void doSomething() final {foo(); doSomethingChild(); }
virtual void doSomethingChild() = 0;
};
class ChildClass : public ParentClass {
virtual void doSomethingChild();
};
这样,子类必须做的实施和foo()
总是被调用,但该方法是不一样的了。有没有更优雅的解决方案?
您的“脏”解决方案称为模板方法模式。这对你的问题是一个完美的解决方案。 – 2014-09-13 09:29:42
我很确定你这样做的方式就是这样做的。 – Galik 2014-09-13 09:30:22
@TobiasBrandt出于某种原因,它仍然让我感觉自己像个罪人。 :p – manabreak 2014-09-13 09:33:06