C++ 从超类对象、虚拟函数调用子类方法

C++ 从超类对象、虚拟函数调用子类方法,c++,class,inheritance,polymorphism,subclass,C++,Class,Inheritance,Polymorphism,Subclass,我正在设计一个国际象棋游戏(C++初学者),但是我一直在检查单个棋子类型,例如,典当一次只移动1个空格,除了第一次移动2个空格,等等 我有一个piece类,它的一个子类是pawn、king等,它包含以下方法: check(string position,string destination); 并返回一个布尔值,以确定是否可以移动到目标 我有一个指针指向我通过以下操作定义的每个部分: pawn pawnPieces[16]; piece *pointer[16]; for (i=0;i<

我正在设计一个国际象棋游戏(C++初学者),但是我一直在检查单个棋子类型,例如,典当一次只移动1个空格,除了第一次移动2个空格,等等

我有一个piece类,它的一个子类是pawn、king等,它包含以下方法:

check(string position,string destination);
并返回一个布尔值,以确定是否可以移动到目标

我有一个指针指向我通过以下操作定义的每个部分:

pawn pawnPieces[16];
piece *pointer[16];

for (i=0;i<16;i++)
{
    pointer[i]=&pawnPieces[i];
}
现在,当我调用上面的cout行时,我得到了一个分段错误,我不确定为什么。我想是因为我在用指针

编辑2:谢谢你!我已经实现了这一点,但是我有一个小错误,虚拟是不是意味着要附加到pawn和king类?根据我的理解,我认为虚拟标记只在基类上

EDIT3:我明白了,我用虚拟标记标记了pawn和king类中的check函数,并编译了它

现在,通过调用对象本身,我得到了一个分割错误

pawnPieces[1].check("B1","C1") 
通过调用指向对象的指针

pointer[1]->check("B1","C1") 
我不知道为什么


EDIT4:现在一切都正常了,我从main到test调用它,但是当我从程序内部调用它时,一切都正常了,谢谢大家

您试图做的正是
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 ...;
    }
};

好的,分别是查找接口和
virtual
、纯
virtual
。虚拟/纯方法无疑是一条可行之路。在
piece
中声明
check()
,并在
pawn
king
等中覆盖它。如果您仍然有问题,请显示您的实际代码。编辑2:它只需要在基类中,但我更愿意在所有基类中使用它(以及
覆盖
),以使其更加明显。非常感谢您,我开始有进展了!
pointer[1]->check("B1","C1") 
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 ...;
    }
};