我正在用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。有没有解决的办法?也许是类型转换?还是完全优雅的实现?
这是对象切片的一个很好的例子。
防止它的一种方法是添加以下内容:
Property *b1 = dynamic_cast<Property*>(board[index]);
if (b1)
{
int b = b1->getPrice(); // Or whatever getPrice() returns;
}
但是,你必须尝试每个子类(动态垂头丧气Property
,CommunityChest
等等),以及可能使代码看起来笨重的给你。
正如一些评论者所建议的,您可以将方法添加getPrice()
到GameSquare
类中。如果正方形不是Property
,请返回0
。这使您可以检查某物是否为aProperty
或其他。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句