C++중 dynamiccast<>의 사용 방법 소결

일정한 판단 을 내 릴 것 이다.       포인터 에 dynamiccast,null 로 돌아 가 는 데 실 패 했 습 니 다.정상 cast 후의 대상 지침 으로 돌아 가 는 데 성공 하 였 습 니 다.       인용 에 dynamic 진행캐 스 트,실 패 했 습 니 다.이상 을 던 져 정상 캐 스 트 후의 대상 에 게 성공 적 으로 되 돌려 주 었 습 니 다.주의:dynamiccast 는 부모 클래스 를 하위 클래스 로 캐 스 트 할 때 부모 클래스 에 가상 함수 가 있어 야 합 니 다.예 를 들 어 아래 코드 에서 CBasic 클래스 의 test 함 수 를 정의 하지 않 습 니 다.       virtual 시 컴 파일 러 가 잘못 되 었 습 니 다:error C2683:dynamiccast:"CBasic"는 컴 파일 러 에 대한 다 중 형식 이 아 닙 니 다.       dynamic_cast<>는 RTTI 기술 을 사용 하기 때문에'실행 시 유형 정보'를 시작 해 야 합 니 다.VC.net 2003 에 서 는 기본적으로 닫 힙 니 다.       그래서 이 옵션 을 인위적으로 시작 해 야 합 니 다.그렇지 않 으 면 컴 파일 러 는 아래 의 경 고 를 보고 할 것 이다.         warning C4541: “dynamic_cast'는 밴드/GR-의 다 중 유형 인'CBasic'에 사 용 됩 니 다.       예측 할 수 없 는 행동 으로 인해 프로그램 이 실 행 될 때 이상 이 발생 할 수 있 습 니 다.이 설정 은 Project->Setting 에서 C/C++->C++Language 에서 설정 합 니 다.*/ 

#include <iostream>
using namespace std;

class CBasic
{
public:
     virtual int test(){return 0;} // virtual
};

class CDerived : public CBasic
{
public:
     virtual int test(){    return 1;}
};

int main()
{
     CBasic        cBasic;
     CDerived    cDerived;

     CBasic * pB1 = new CBasic;
     CBasic * pB2 = new CDerived;

     //dynamic cast failed, so pD1 is null.
     CDerived * pD1 = dynamic_cast<CDerived * > (pB1);   

     //dynamic cast succeeded, so pD2 points to  CDerived object                                        
     CDerived * pD2 = dynamic_cast<CDerived * > (pB2);   

     //dynamci cast failed, so throw an exception.            
//    CDerived & rD1 = dynamic_cast<CDerived &> (*pB1);   

//dynamic cast succeeded, so rD2 references to CDerived object.
     CDerived & rD2 = dynamic_cast<CDerived &> (*pB2);   

     return 0;
}

좋은 웹페이지 즐겨찾기