从超类对象数组中调用子类方法

卢克·柯林斯(Luke Collins)

我正在用C ++实现游戏“大富翁”我正在处理一个抽象超类BoardSquare(其唯一属性是平方名称),根据游戏正方形的类型(是否是属性,机会等),具有各种子类。

现在,由于我想将板表示为数组,并且正方形的类型不同,因此我声明了一个BoardSquare指针数组

GameSquare** board = new GameSquare*[40];

并继续根据类型填充每个条目:

board[1] = new Property("Old Kent Road", 0);
board[2] = new CommunityChest();
board[3] = new Property("Whitechapel Road", 0);

等等。

现在Property,例如,具有的特定方法getPrice()但是跑步

board[1]->getPrice()

给出错误

“ class GameSquare”没有名为“ getPrice”的成员

这告诉我指针仍被视为GameSquare。有没有解决的办法?也许是类型转换?还是完全优雅的实现?

TriskalJM

这是对象切片的一个很好的例子

建议1:动态下调

防止它的一种方法是添加以下内容:

Property *b1 = dynamic_cast<Property*>(board[index]);
if (b1)
{
    int b = b1->getPrice(); // Or whatever getPrice() returns;
}

但是,你必须尝试每个子类(动态垂头丧气PropertyCommunityChest等等),以及可能使代码看起来笨重的给你。

建议2:将getPrice()添加到GameSquare

正如一些评论者所建议的,您可以将方法添加getPrice()GameSquare类中。如果正方形不是Property,请返回0这使您可以检查某物是否为aProperty或其他。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当子类对象存储在超类数组中时,如何调用子类方法?

从超类调用子类方法

Java继承问题。在超类数组中调用子类方法不会编译

将子类中的对象放入超类类型的数组后如何调用子类方法?

如何从修饰的子类方法中调用重写的超类方法

当对象是子类类型时,为什么我不能从超类调用子类中的公共方法?

Java:从超类构造函数中的子类调用的方法

确定用于调用子类中的方法的超类引用

您如何在Java中从超类调用子类方法?

为什么从子类的超类调用方法中获得“ this”?

超类引用无法在Java中调用子类方法

在向量C ++中从超类调用子类方法

Java继承:在超类中调用子类方法

从 Java 中超类类型的 ArrayList 调用子类方法

调用超类方法而不是子类方法

NSNotificationCenter从超类或子类调用方法?

如何使子类自动调用超类方法

超类类型对象的子类的构造方法?

Java:分配了子类数组对象的超类数组对象

创建持有超类和子类对象的对象数组的正确方法

我们可以创建一个不能从类中调用任何方法的类(超类或子类)的对象吗?

绘制uml类图,并在第三类中调用超类对象和子类对象

Java多态性如何调用子类对象的超类方法

如果仅初始化超类对象,是否可以调用特定于子类的方法?

在数组中创建Java中超类类型的子类对象

有没有办法知道超类构造函数中调用对象的子类?C ++

如何确保某些方法从子类(Java)中的方法从抽象超类中调用

在子类的方法中本地调用超类方法时,使用“ super”关键字还是使用超类实例?

通过超类实例调用子类类的方法