代码场景如下:
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()
,但是该方法已不再相同。是否有更加优雅的解决方案?