首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有调用c++虚拟方法

没有调用c++虚拟方法
EN

Stack Overflow用户
提问于 2012-05-07 18:39:05
回答 3查看 191关注 0票数 1

我在头中声明了两个c++类。基类声明一个虚拟方法,第二个类重写它。实现在.cpp文件中。

代码相当简单

代码语言:javascript
运行
复制
void DefendProperty::apply(Queue<Defend*>* defendQueue, 
const Tool* toolSource, const Actor* actorSource, const Actor* defender) {
    cout << "BASE" << endl;
}
代码语言:javascript
运行
复制
void DefendPropertyPhysical::apply(Queue<Defend*>* defendQueue, 
Tool* toolSource, const Actor* actorSource, const Actor* defender) {
    cout << "CORRECT" << endl;
    defendQueue->enqueue(new Defend(
        DefendTypePhysical::TYPE, 
        new DamageValuesPhysical(
        getRandomDouble(minDamageReduction, maxDamageReduction))
    ));
}

问题是,当我调用实例化为B的类时,它输出基,而不是正确的。我不知道这是怎么回事。

这些类存储在没有apply方法的基本ToolProperty类型中。当它们被调用时,会使用DefendProperty将它们输入到dynamic_cast类型中。

代码语言:javascript
运行
复制
dynamic_cast<DamageProperty*>(node->value)->apply(damageQueue, toolSource, actorSource);

如能提供任何帮助,将不胜感激。

EN

Stack Overflow用户

发布于 2012-05-07 18:43:01

你的功能有不同的签名。查看"toolSource“的类型。第二个不是第一个的覆盖,而是一个过载。

编译器几乎永远不会警告您的常见错误。我不知道有谁能做到。

顺便说一句,如果要在指针上使用动态强制转换而不检查结果,就没有理由使用它。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10487260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档