2009-11-23 3 views
0

아무도 정확하게 동적 캐스팅은 C++에서 무엇을 의미하는지 말할 수 있습니다. 정확히이 동적 캐스팅을 사용할 수 있습니까? 이것은 인터뷰에서 나에게 질문을 받았는데 나는이 질문에 대해 공백으로 갔다. :)정확하게 C에서 동적 캐스팅은 무엇입니까

+0

dup http://stackoverflow.com/questions/28002/regular-cast-vs-staticcast-vs-dynamiccast – Macke

답변

2

런타임에 객체의 클래스를 찾을 첫번째 old answer

+1

좋은 답변이지만 답변을 건너 뛰고 오른쪽에있는 두 번째 글 (litb) ... 첫번째와 달리 :/ –

+0

@ 마티유 : 시간 고정, litb '답변이 먼저되었습니다. 어쨌든 힌트를 주셔서 감사합니다. – philant

0

Dynamic casting은 안전하게 런타임에 개체 인스턴스의 유형을 검색합니다.

이것은 잠재적으로 다소 클 수있는 참조 테이블을 생성하는 컴파일러에 의해 수행됩니다. 이러한 이유로 프로그래머가 기능을 사용하지 않는다는 것을 알게되면 컴파일하는 동안 자주 비활성화됩니다.

7

dynamic_cast는이 방법을 주조하는 검색을 사용해보십시오.

class Base 
{ 
    public: 
    virtual bool func1(); 
}; 


class Derived1 : Base 
{ 
    public: 
    virtual bool func1(); 

    virtual bool funcDer1(); 
}; 



class Derived2 : Base 
{ 
    public: 
    virtual bool func1(); 
    virtual bool funcDer2(); 
}; 

Base* pDer1 = new Derived1; 
Base* pDer2 = new Derived2; 


Derived2* pDerCasted = dynamic_cast<Derived2*>(pDer2); 
if(pDerCasted) 
{ 
    pDerCasted->funcDer2(); 
} 


-> We cannot call funcDer2 with pDer2 as it points to Base class 
-> dynamic_cast converts the object to Derived2 footprint 
-> in case it fails to do so, it returns NULL .(throws bad_cast in case of reference) 

참고 : 일반적으로 Dynamic_cast는 OO 설계를 신중하게해야합니다.

+0

Derived2 * pDerCasted ..를 의미한다고 생각하십니까? – lorenzog

+0

예, Derived2. 나는 갱신했다. –

관련 문제