2015-01-06 1 views
1

저는이 두 클래스를가집니다.C++에서 상속 객체의 유형을 결정하십시오.

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

}; 

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

내가 "m가 foo의 유형 (Bishop)하지 ChessPiece.

을 얻으려고 노력이

ChessPiece* foo = new Bishop() 

처럼 만든 후 나는 ChessPiece의 유형을 결정하기 위해 노력하고있어

고마워요

+0

기본 클래스에 가상 기능이없는 경우에는이 작업을 수행 할 수 없습니다. –

+0

무엇을 위해 그것을 결정합니까? 당신은 실제로 무엇을 성취하려고합니까? – Andrew

+0

특정 체스 조각이 킹인지 아니면 다른 것이 있는지 확인하려고 시도합니다. – Mumfordwiz

답변

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를 정의하는 체스 조각 클래스에 열거 형을 저장할 수 있습니다.

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을()를 사용하는 방법의

0

다음 코드를 사용할 수 있습니다.

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