我有这两个班。
class ChessPiece
{
public:
ChessPiece();
virtual bool move() = 0;
};
class Bishop: public ChessPiece
{
public:
Bishop();
bool move();
};
在我创建ChessPiece之后,我正试图确定它的类型
ChessPiece* foo = new Bishop()
我试图让foo
(Bishop
)的类型不是ChessPiece
。
谢谢
答案 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.