c++ - 如何避免基类中的多态调用
问题描述
我有一个类,其中一些方法调用其他方法,如下例所示:
class Base {
public:
virtual void foo() {
cout << "base::foo" << endl;
bar();
}
virtual void bar() {
cout << "base::bar" << endl;
}
};
然后我想创建一个包装类,其中每个方法都调用基类方法和一些我用于某些测试的其他东西。
class Derived :public Base {
public:
void foo() override {
cout << "derived::foo" << endl;
Base::foo();
}
void bar() override {
cout << "derived::bar" << endl;
Base::bar();
}
};
我的程序从基类调用函数,我已将其更改为从派生类调用。
int main() {
//Base A;
Derived A;
A.foo();
return 0;
}
在上面的例子中,当我调用 Derived::foo() 时,它调用了 Base::foo(),而后者又调用了 bar();由于多态性,当从 Base::foo() 调用 bar() 时,它被解析为 Derived::bar()。我希望 Base::foo() 调用 Base::bar() 并且只有来自 Derived 的调用才能调用 Base 方法。是否可以在不修改基类的情况下实现这一点?
解决方案
您可以通过限定函数的名称来使用静态分派到虚函数:
virtual void foo() {
cout << "base::foo" << endl;
Base::bar();
}
是否可以在不修改基类的情况下实现这一点?
我不这么认为;至少如果您计算修改基类的成员函数的定义,则不会。
推荐阅读
- .net - MSBuild 导入项目 MSBuildExtensionsPath32 依赖于版本
- imagemagick - Imagemagick 删除图像的区域
- flutter - 颤振:支持的语言抛出错误(Localizations.of
(上下文,MaterialLocalizations)返回 null) - java - 为什么 isSameMethod() 对于不同的路径返回 true?
- git - 错误:无法索引文件 'src/hoc/Aux.js'
- scala - Scala,Cats,`ap`的用法
- php - 在 PHP 项目中使用 ajax 问题重绘 HTML
- swift - 在 SwiftUI 中使用 CGContext
- javascript - 设计布局排序算法
- r - 部署 Shiny 应用程序时 RStudio 连接失败检索包