我想调用一个派生类函数,该函数未使用基类指针在基类中定义.但这总是引发错误:
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)
一种方法是virtual在基类中创建函数,然后在派生类中重写它.您不必在基类中定义函数(尽管可以),但virtual void foo() = 0; 如果您不想在基类中提供实现,则可以在基类中使用纯虚拟语法.
这将允许您在派生类中覆盖它,并仍然通过基类指针在基类中调用它.这被称为"多态".
如果您确定它在那时实际上是派生类指针,您也可以在运行时将它强制转换为派生类型.如果不是,它会崩溃.
| 归档时间: |
|
| 查看次数: |
9657 次 |
| 最近记录: |