티스토리 뷰

흔석/프로그램 개발

Dynamic Casting

JOHNPARK82 2006. 5. 14. 12:31
일단 dynamic cast를 사용하기 위해서는 setting이 필요하다.

  Project Settings(Alt + F7)에서 C/C++ 탭에서 Category → C++ Language를 누르고 Enable Run-Time Type Information(RTTI)를 체크하자.

  그런 다음 dynamic cast를 사용하면 된다.

----------------------------------------------------------------------------------------

#include <iostream>

using namespace std;

enum TYPE {HORSE, PEGASUSE};


class Horse
{
private :
   int itsAge;
public :
   virtual void Gallop() {cout << "Galloping..." << endl;}
};


class Pegasus : public Horse
{
public :
   virtual void Fly() {cout << "Fly! Fly!" << endl;}
};


const int NumberHorses = 5;


int main()
{
   Horse * Ranch[NumberHorses];
   Horse * pHorse;


   int choice;


   for(int i = 0; i < NumberHorses; i++)
  {
        cout << "(1)Horse (2)Pegasus : ";
        cin >> choice;


        if(choice == 2)
              pHorse = new Pegasus;

       else
              pHorse = new Horse;


       Ranch[i] = pHorse;
   }


   cout << endl;


   for(i = 0; i < NumberHorses; i++)

   {
       Pegasus * pPeg = dynamic_cast<Pegasus *> (Ranch[i]);

/*        

  컴파일 하는 동안에 Ranch[i]가 가르키는 객체가 Pegasus라면 pPeg가 Ranch[i]가 될 것이고 그렇지 않으면 pPeg가 NULL이 될 것이다.

*/

      if(pPeg)
            pPeg->Fly();
      else
            cout << "Just a horse" << endl;


      delete Ranch[i];
  }

   return 0;
}