确定 C++ 中固有对象的类型

Determine type of an inherting object in c++

本文关键字:对象 类型 C++ 确定      更新时间:2023-10-16

我有这两个类。

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

我试图在像这样创建棋子后确定棋子的类型

ChessPiece* foo = new Bishop()

我试图获得foo的类型(Bishop)而不是ChessPiece.

谢谢

好吧,有一些方法可以做到这一点,看看动态转换:

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 的国际象棋棋子类中存储枚举。

解决问题的方法的一个例子:

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() 来确定这是什么类型的棋子。

您可以使用以下代码。

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