我在标题中声明了两个 c++ 类。基类声明了一个虚方法,第二个类覆盖了它。实现在 .cpp 文件中。
代码相当简单
void DefendProperty::apply(Queue<Defend*>* defendQueue,
const Tool* toolSource, const Actor* actorSource, const Actor* defender) {
cout << "BASE" << endl;
}
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 的类时,它输出 BASE,而不是 CORRECT。我不知道此时发生了什么。
这些类存储在没有 apply 方法的基本 ToolProperty 类型中。当它们被调用时,它们会使用 dynamic_cast 类型转换为 DefendProperty 类型。
dynamic_cast<DamageProperty*>(node->value)->apply(damageQueue, toolSource, actorSource);
任何帮助,将不胜感激