繁体   English   中英

从超类对象,虚拟函数中调用子类方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM