【发布时间】:2020-07-02 09:48:18
【问题描述】:
我有一堂课:
class MyCoolBean {
public:
virtual void toot(){
log("ooh la la");
}
}
还有我的派生类:
class MyCoolBeansBoy : public MyCoolBean{
public:
void toot()override{
log("oh yeah");
}
}
如果我这样做:
MyCoolBeansBoy 男孩; boi.toot();
输出是:
oh yeah
但我希望输出是:
ooh la la
oh yeah
现在我知道我可以将派生函数修改为:
void toot()override{
MyCoolBean::toot();
log("oh yeah");
}
但如果我这样做,那么任何实现派生类的人都可以简单地忘记。无论如何要强制调用MyCoolBean::toot() 吗?
编辑:我知道这在技术上是可行的,因为这个问题的答案:
How to ensure that every method of a class calls some other method first?
上面链接中的解决方案可以用来强制所有函数调用一个成员函数!我的问题是如何只为覆盖方法执行此操作,并专门调用基本方法! :)
【问题讨论】:
-
你不能并且链接问题的接受答案并不能确保调用
loglog。仍然可以编写LoggingFoo f; f.a();,它会直接调用a,而不会执行log。