[英]Calling subclass methods from superclass object, virtual functions
我正在设计一个国际象棋游戏(C ++初学者),但是我只能检查单个棋子类型,例如典当一次只能移动1个空格,第一次则只能移动2个空格,依此类推。
我有一个片断类,而它的子类是pawn,king等,其中包含以下方法:
check(string position,string destination);
并返回一个布尔值,是否可以移动到目的地。
我有一个指向我通过执行定义的每个部分的指针:
pawn pawnPieces[16];
piece *pointer[16];
for (i=0;i<16;i++)
{
pointer[i]=&pawnPieces[i];
}
初步检查后,我想从main调用上面的check函数作为测试:
cout << pointer[1]->check("B1","C1") << endl;
这给了我一个错误“没有名叫'check'的成员”的错误,这是有道理的,但是我敢肯定会有一种方法将片断类链接到典当,国王等。
我想我需要根据已阅读的内容对虚函数做些事情,但是我不确定该如何处理。 如果有人可以提供一些建议,将不胜感激。
这种尝试从上面的类的指针调用子类函数的方法可能存在根本缺陷,也许我需要修改设计才能实现此目标? 我仍然希望将pawn类的check方法保持在同一位置,因为我认为它可以很好地封装它。
编辑:我在piece类中做了一个纯虚函数:
virtual bool check(string positionIN,string destination)=0;
现在,当我调用上面的cout行时,出现了细分错误,并且不确定原因。 我假设这是因为我在使用指针?
EDIT2: 谢谢你! 我已经实现了,但是我遇到了一个小错误,虚拟意味着要附加到Pawn和King类吗? 根据我的理解,我认为虚拟标签仅在基类上使用。
EDIT3:我了解,我使用虚拟标记标记了pawn和king类中的check函数,并对其进行了编译。
现在我通过调用对象本身遇到了分段错误
pawnPieces[1].check("B1","C1")
并通过调用对象的指针
pointer[1]->check("B1","C1")
从主要,我不确定为什么。
EDIT4:现在一切正常,我正在从main调用它进行测试,但是当我从程序中调用它时,一切正常,谢谢大家!
您试图做的正是virtual
方法的含义。
class piece
{
public:
virtual bool check(string position, string destination) = 0;
};
class pawn : public piece
{
public:
virtual bool check(string position, string destination)
{
return ...;
}
};
class king : public piece
{
public:
virtual bool check(string position, string destination)
{
return ...;
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.