如果我从另一个派生一个类并覆盖一个函数,我可以通过在派生类的Base::myFunction()
实现中调用myFunc
来调用基函数。
但是 - 有没有办法在我的Base
类中定义在任何情况下调用基函数,也没有在覆盖函数中显式调用它? (在执行派生函数之前或之后)
或者甚至更好,如果我的虚拟Base
类中有虚函数,并且有两个实现的私有函数before()
和after()
,则可以在{{1在调用此Base
类的任何派生类中的函数之前和之后的类,将调用Base
和before()
?
谢谢!
答案 0 :(得分:21)
不,这是不可能的。
但你可以通过调用不同的虚函数来模拟它:
class Base
{
public:
void myFunc()
{
before();
doMyFunc();
after();
}
virtual void doMyFunc() = 0;
};
答案 1 :(得分:0)
您试图阻止派生类重载/覆盖基类中的方法。你可以通过将方法标记为“不可覆盖”(取决于语言)来鼓励它,但总是有办法解决它。
换句话说,你不能强迫别人以特定方式使用你的课程,只能告诉他们应该如何使用你的课程。
答案 2 :(得分:0)
回答C ++,你不能以你想要的方式“无形地”调用一个继承的函数。
通过继承类调用的唯一方法是构造函数和析构函数。