c++ - 如何使派生类函数在调用时始终调用相同的基类函数?
问题描述
如何创建基类虚函数,以便在派生类调用其函数版本时始终调用它?BaseClass::foo()
我知道我可以通过在函数开头编写类似的内容来调用基类函数DerivedClass::foo()
,但是如果我希望默认调用它,而派生类的创建者甚至不知道基类函数做了什么?
class BaseClass
{
BaseClass();
virtual void foo() {
printf("base");
}
}
class DerivedClass : public BaseClass
{
DerivedClass();
void foo() {
printf("derived");
}
}
int main()
{
DerivedClass dc;
dc.foo();
}
应该打印:
base
derived
解决方案
这不是直接可能的。您可以将函数拆分为基类上的非虚拟函数和派生类上的foo
(纯)虚拟函数:fooCore
class Base {
protected:
virtual void fooCore() = 0;
public:
void foo(){
// do stuff, then call method of derived class
this->fooCore();
}
};
class Derived {
protected:
void fooCore() override {
//actual
};
};
从“外部”来看,呼叫Base::foo()
保持不变。
推荐阅读
- javascript - 未捕获的类型错误:无法读取未定义的属性“GlobalWorkerOptions”
- terraform - 在创建资源之前,我们可以在 Terraform 中匹配多个条件吗?
- django - 使用 django treebeard 在 django 中实现分层系统
- google-api - 启用 Google 我的商家 API。API 调用失败
- javascript - 将java中的AES/ECB/NoPadding转换为Nodejs代码
- xpath - Xpath - 在纯文本之后选择最近的元素
- reactjs - 路由api时.htaccess 500内部服务器错误
- html - 如何将多个图像垂直放置在单个图像的顶部
- group-by - 在 Neo4j 中,如何按一个返回键分组,而不是所有非聚合键作为返回?
- bash - Sed 替换 - 制表符空格