无法使用基类指针调用派生类函数

Suj*_*ran 4 c++

我想调用一个派生类函数,该函数未使用基类指针在基类中定义.但这总是引发错误:

error C2039: ‘derivedFunctionName’ : is not a member of ‘BaseClass’
Run Code Online (Sandbox Code Playgroud)

你知道我怎么能绕过这个吗?

谢谢,

Ern*_*ill 14

不能通过指向基类的指针调用仅出现在派生类中的成员; 首先必须将它(可能使用dynamic_cast)转换为指向派生类型的指针 - 否则编译器不知道该方法是否存在.

它可能看起来像这样:

void someMethod(Base* bp) {
    Derived *dp = dynamic_cast<Derived*>(bp);
    if (dp != null)
        dp->methodInDerivedClass();
}
Run Code Online (Sandbox Code Playgroud)


edt*_*guy 5

一种方法是virtual在基类中创建函数,然后在派生类中重写它.您不必在基类中定义函数(尽管可以),但virtual void foo() = 0; 如果您不想在基类中提供实现,则可以在基类中使用纯虚拟语法.

这将允许您在派生类中覆盖它,并仍然通过基类指针在基类中调用它.这被称为"多态".

如果您确定它在那时实际上是派生类指针,您也可以在运行时将它强制转换为派生类型.如果不是,它会崩溃.