首页 > 解决方案 > 我可以从 C++ 中的派生实例访问指向基实例的指针吗?

问题描述

  1. 我有一个基类和一个派生类以及一堆定义为虚拟的方法,这些方法在派生类中被覆盖。
  2. 我有一个派生类的实例分配给一个基指针“myPointer”,所以派生类的虚拟方法被调用。
  3. 是否可以将“myPointer”“强制转换”为指向实际基实例的指针,从而通过新的“强制转换指针”调用基本虚拟方法?
  4. 我知道myPointer->Base::MyMethod();这不是我想要的。我想做类似的事情:

    Base* myPointer = new Derived();
    Base* actualBasePointer = (some kind of case) myPointer;
    actualBasePointer->MyMethod(); // this invokes the base virtual method. 
    

标签: c++

解决方案


ABase*是一个Base*。没有禁用虚拟调度/多态性的“变体”,也没有一种类型的强制转换可以为您提供不同类型的指针。

您的功能是virtual或不是,如果您可以打开和关闭它,那将是非常令人困惑的。

取而代之的是,在您的类中使用替代的非虚拟函数来满足您的需要。我建议你找到一种方法来private避免与现有的public虚函数混淆——通常这意味着它们将纯粹用于实用程序/内部目的。如果这意味着您不能将它们用于您的目标,我建议您审查您的方法。

或者,坚持清楚和众所周知的myPointer->Base::MyMethod()——仅仅知道它似乎并不是不使用它的好理由。


推荐阅读