如何从父对象向量

时间:2017-06-03 10:52:46

标签: c++ oop vector

我有一个作业,我有一个'机器人' - 我有一个对象。我有另一个名为QuickLimitedRobot的Object,它继承自Robot但又有一个字段 - limit,这是一个整数。

我有一个包含所有机器人的向量,无论它们是有限的还是机器人对象的其他继承类型,我需要在我已经知道的向量节点中找到我的代码上的getLimit()函数这是一个QuickLimitedRobot。

void RobotDB::moveLimitedRobot(const int rNum, const std::string &rDirection){
int cellValue;
int locX=robots[rNum]->getCoordinate().getX();
int locY=robots[rNum]->getCoordinate().getY();
//@todo: :(
QuickLimitedRobot tempQuick=*robots[rNum];
int rLim=tempQuick.getLimit();

我的编译器不能编译它,因为我试图将Robot转换为非标量类型' QuickLimitedRobot。

有人可以请我找个解决方案吗?

提前thx!

1 个答案:

答案 0 :(得分:1)

您可以使用dynamic_cast。这看起来像:

QuickLimitedRobot* tempQuick = dynamic_cast<QuickLimitedRobot*>(robots[rNum]);
if (tempQuick) {
    int rLim = tempQuick->getLimit();

或者既然你说你已经知道它是QuickLimitedRobot,你可以通过引用进行投射。如果你弄错了,它会抛出异常。

QuickLimitedRobot& tempQuick = dynamic_cast<QuickLimitedRobot&>(*robots[rNum]);
int rLim = tempQuick.getLimit();

或者,如果您真的100%绝对确定它是QuickLimitedRobot,并且继承不是虚拟的,您甚至可以尝试static_cast。这次如果你弄错了,使用结果引用是未定义的行为 - 如果你很幸运就会崩溃。

QuickLimitedRobot& tempQuick = static_cast<QuickLimitedRobot&>(*robots[rNum]);
int rLim = tempQuick.getLimit();