强制派生类中调用基函数
-
19-09-2019 - |
题
如果我从另一个派生类和重写函数,我可以通过调用Base::myFunction()
的派生类的实现内myFunc
调用基函数。
However-是有办法在我Base
类来定义的基函数被调用在任何情况下,也不必在它被覆盖的函数显式调用? (之前或之后执行的导出的功能)
甚至更好,如果我有我的虚拟Base
类的虚函数,和两个实现的私有函数before()
和after()
,是否有可能在Base
类之前,在任何派生类此Base
的功能后定义类被调用时,before()
和after()
将被称为?
谢谢!
解决方案
没有,这是不可能的。结果 但是你可以通过调用像这样不同的虚函数模拟它:
class Base
{
public:
void myFunc()
{
before();
doMyFunc();
after();
}
virtual void doMyFunc() = 0;
};
其他提示
您正在试图防止一个派生类过载/覆盖在底座的方法。您可以通过标记方法为“不可重写”(取决于语言)鼓励,但总有办法解决它。
在换句话说,你不能强迫别人使用你的类以一种特殊的方式,只告诉他们应该使用的方式。
接听了C ++,你不能有一个继承功能“无形”叫你想要的方式。
这调用向下通过继承类的唯一方法是构造和析构。
不隶属于 StackOverflow