确定c ++中继承对象的类型

时间:2015-01-06 13:42:54

标签: c++ oop object

我有这两个班。

class ChessPiece
{
public:
    ChessPiece();
    virtual bool move() = 0;

};

class Bishop: public ChessPiece
{
public:
    Bishop();
    bool move();
};

在我创建ChessPiece之后,我正试图确定它的类型

ChessPiece* foo = new Bishop()

我试图让fooBishop)的类型不是ChessPiece

谢谢

3 个答案:

答案 0 :(得分:0)

嗯,有一些方法可以做到这一点,看看动态投射:

class A
{
public:
   virtual void Foo() = 0;
};

class B : public A
{
public:
   void Foo() { }
};

void Test()
{
   A* bar = new B();
   if (B* test = dynamic_cast<B*>(bar))
   {
      // use test here
   }
   delete bar;
}

或者,您可以将枚举存储在定义作品ID的棋子类中。

答案 1 :(得分:0)

解决问题的一种方法示例:

enum PieceType
{
    King,
    Queen,
    Rook,
    Bishop,
    Knight,
    Pawn
};

class ChessPiece
{
public:
    ChessPiece();
    virtual ~ChessPiece();
    virtual bool move() = 0;
    virtual PieceType GetType() const = 0;
};

class Bishop : public ChessPiece
{
public:
    Bishop();
    virtual ~Bishop();
    virtual bool move();
    virtual PieceType GetType() const { return Bishop; }
};

然后使用ChessPiece :: GetType()来确定这是什么类型的作品。

答案 2 :(得分:0)

您可以使用以下代码。

ChessPiece obj; 
Bishop* pObj = dynamic_cast<Bishop*>(&obj);//Change to Bishop,return NULL if failed.