c++ - 我可以从 C++ 中的派生实例访问指向基实例的指针吗?
问题描述
- 我有一个基类和一个派生类以及一堆定义为虚拟的方法,这些方法在派生类中被覆盖。
- 我有一个派生类的实例分配给一个基指针“myPointer”,所以派生类的虚拟方法被调用。
- 是否可以将“myPointer”“强制转换”为指向实际基实例的指针,从而通过新的“强制转换指针”调用基本虚拟方法?
我知道
myPointer->Base::MyMethod();
这不是我想要的。我想做类似的事情:Base* myPointer = new Derived(); Base* actualBasePointer = (some kind of case) myPointer; actualBasePointer->MyMethod(); // this invokes the base virtual method.
解决方案
ABase*
是一个Base*
。没有禁用虚拟调度/多态性的“变体”,也没有一种类型的强制转换可以为您提供不同类型的指针。
您的功能是virtual
或不是,如果您可以打开和关闭它,那将是非常令人困惑的。
取而代之的是,在您的类中使用替代的非虚拟函数来满足您的需要。我建议你找到一种方法来private
避免与现有的public
虚函数混淆——通常这意味着它们将纯粹用于实用程序/内部目的。如果这意味着您不能将它们用于您的目标,我建议您审查您的方法。
或者,坚持清楚和众所周知的myPointer->Base::MyMethod()
——仅仅知道它似乎并不是不使用它的好理由。
推荐阅读
- c# - 使用反射检测在 C# 方法中调用了哪个异步重载
- laravel - 无法与宅基地流浪
- r - R/dplyr 函数:频率表,包括分组变量的总数
- unity3d - 使用相对 VR 控制器旋转应用游戏对象旋转?
- java - 用Java中的模逆乘以指数
- exec - 在反应应用程序中运行 yarn start:浏览器中的开发视图永远不会加载,我收到此错误:
- c++ - Uncrustify - 枚举中的尾随注释
- javascript - PWA 应用程序:缓存问题
- python-3.x - Azure 函数 Python 异常未正确记录到 App Insights
- r - Forcats 重新排序不适用于 ggplot