##son person ; Employee employee ; Person * ptr = & employee ; Person & ref = employee ; / / The string returned by typeid : : name is implementation - defined std : : cout < < typeid ( person ). name < < std : : endl ; / / Person ( statically known at compile - time ) std : : cout < < typeid ( employee ). name < < std : : endl ; / / Employee ( statically known at compile - time ) std : : cout < < typeid ( ptr ). name < < std : : endl ; / / Person * ( statically known at compile - time ) std : : cout < < typeid ( * ptr ). name < < std : : endl ; / / Employee ( looked up dynamically at run - time / / because it is the dereference of a / / pointer to a polymorphic class ) std : : cout < < typeid (
; void my - function ( A & my - a ) { try { B & my - b = dynamic - cast < B & > ( my - a ) ; / / cast will be successful only for B type objects. my - b. methodSpecificToB ; } catch ( const std : : bad - cast & e ) { std : : cerr < < " Exception " < < e. what < < " thrown. " < < std : : endl ; std : : cerr < < " Object is not of type B " < < std : : endl ; } } int main { A * arrayOfA [ 3 ] ; / / Array of pointers to base class ( A ) arrayOfA [ 0 ] = new B ; / / Pointer to B object arrayOfA [ 1 ] = new B ; / / Pointer to B object arrayOfA [ 2 ] = new A ; / / Pointer to A object for ( int i = 0 ; i < 3 ; i ) { my - function ( * array
편집 ] ↑ Sun Microsystems ( 2000 ) ↑ 비야네 스트롭스트룹 ↑ C standard ( ISO / IEC14882 ) section 5. 2. 8 [ expr. typeid ], 18. 5. 1 [ lib. type. info ] - - ↑ 외부 링크 [ 편집 ] dynamic - cast operator at IBM Mac OS X Compilers dynamic - cast operator at MSDN 원본 주소 " " 분류 : C자료형 둘러보기 메뉴 개인 도구 로그인하지 않음토론기여계정 만들기로그인 이름공간 문서토론 변수 보기 읽기편집역사 보기 더 보기 검색 둘러보기 대문사용자 모임요즘 화제최근 문서 보기임의 문서로도움말기부 도구 여기를 가리키는 문서가리키는 글의 최근 올리기특수 문서 목록고유 링크문서 정보위키데이터 항목이 문서 인용하기 인쇄 / 내보내기 책 만들기PDF로 다운로드인쇄용 판 다른 언어 日 本 語 中 文 링크 편집 이 문서는 2018년 1월 31일 ( 수 ) 13 : 25에 마지막으로 편집되었습니다. 모든 문서는 크리에이티브 커먼즈 저작자표시 - 동일조건변경허락 3. 0에 따라 사용할 수 있으며
##ava cast [ 편집 ] C의 dynamic - cast 연산자는 클래스 계층에서 참조나 포인터를 더 구체적인 타입으로 다운캐스팅하는데 사용된다. static - cast와 달리, dynamic - cast 의 대상은 반드시 클래스에 대한 포인터나 참조여야 한다. static - cast 와 C - 스타일 타입캐스트 ( 타입 검사가 컴파일 시에 이루어지는 ) 와 달리, 타입 안전 검사는 시에 수행된다. 만약 타입들이 호환되지 않는다면, 예외가 던져지거나 ( 참조를 다룰 때 ) 널 포인터가 반환될 ( 포인터를 다룰 때 ) 것이다. 자바 타입캐스트도 비슷하게 동작한다 ; 만약 던져진 객체가 실제로 대상 타입의 인스턴스가 아니고, 인스턴스인 언어로 정의된 방식으로 변환되지 못한다면, java. lang. ClassCastException 의 인스턴스가 던져질 것이다. [ 4 ] 예시 [ 편집 ] 몇몇 함수가 타입 A의 객체를 인자로 받으며, 만약 전달받은 객체가 B의 인스턴스이고, A의 서브클래스라면, 몇몇 추가적인 연산을 수행하길 바란다고 가정하자. 이것은 다음과 같이 dynamic - cast 를 사용함으로써 달성될 수 있다. # incl
가정하자. 이것은 다음과 같이 dynamic - cast 를 사용함으로써 달성될 수 있다. # include < typeinfo > / / For std : : bad - cast # include < iostream > / / For std : : cout, std : : err, std : : endl etc. class A { public : / / Since RTTI is included in the virtual method table there should be at least one virtual function. virtual ~ A { } ; void methodSpecificToA { std : : cout < < " Method specific for A was invoked " < < std : : endl ; } ; } ; class B : public A { public : void methodSpecificToB { std : : cout < < " Method specific for B was invoked " < < std : : endl ; } ; virtual ~ B { } ; } ; void my - function ( A & my - a ) { try { B & my - b = dynamic
##er to A object for ( int i = 0 ; i < 3 ; i ) { my - function ( * arrayOfA [ i ] ) ; delete arrayOfA [ i ] ; / / delete object to prevent memory leak } } 콘솔 결과 : Method specific for B was invoked Method specific for B was invoked Exception std : : bad - cast thrown. Object is not of type B my - function의 비슷한 버전이 참조 대신 포인터로 쓰여질 수 있다 : void my - function ( A * my - a ) { B * my - b = dynamic - cast < B * > ( my - a ) ; if ( my - b! = nullptr ) my - b - > methodSpecificToB ; else std : : cerr < < " Object is not B type " < < std : : endl ; } 같이 보기 [ 편집 ] 반영 ( 컴퓨터 과학 ) 각주 [ 편집 ] ↑ Sun Microsystems ( 2000 ) ↑ 비야네 스트롭스트룹 ↑ C standard ( ISO
##된다. 왜냐하면 dynamic - cast가 반드시 시에 이것의 인자의 클래스 상속 래티스를 순회해야하는 반면, typeid는 시상수 프로시저이기 때문이다. 반환된 객체의 어떤 면들은 std : : type - info : : name 처럼 구현 시에 정의되며, 모든 컴파일러들에서 일정하다고 할 수는 없다. 클래스 std : : bad - typeid의 객체들은 널 포인터에서 typeid를 위한 표현이 unary * 연산자를 적용하는 것의 결과일 때 던져진다. 예외가 다른 널 참조 인자에 던져지든지 말든지는 구현에 종속적이다. 즉, p가 널 포인터를 야기하는 어느 표현일 때, 보장되어야 할 예외를 위해 표현은 반드시 typeid ( * p ) 형태를 취해야 한다. 예시 [ 편집 ] # include < iostream > / / cout # include < typeinfo > / / for'typeid'class Person { public : virtual ~ Person { } } ; class Employee : public Person { } ; int main { Person person ; Employee employee ; Person * ptr = & employee ; Person & re
of a / / pointer to a polymorphic class ) std : : cout < < typeid ( ref ). name < < std : : endl ; / / Employee ( references can also be polymorphic ) Person * p = nullptr ; try { typeid ( * p ) ; / / not undefined behavior ; throws std : : bad - typeid } catch (... ) { } Person & pRef = * p ; / / Undefined behavior : dereferencing null typeid ( pRef ) ; / / does not meet requirements to throw std : : bad - typeid / / because the expression for typeid is not the result / / of applying the unary * operator } 결과 ( 시스템에 따라 정확한 결과는 다르다. ) : Person Employee Person * Employee Employee dynamic - cast 와Java cast [ 편집 ] C의 dynamic - cast 연산자는 클래스 계층에서 참조나 포인터를 더 구체
타입 정보 - 위키백과, 우리 모두의 백과사전 타입 정보 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 타입 정보 ( RTTI, Run - Time Type Information 또는 Run - Time Type Identification [ 1 ] ) 는 시 객체의 자료형에 관한 정보를 드러내는 C 메커니즘을 가리킨다. RTTI는 정수와 캐릭터 또는 제네릭 타입 같은 간단한 자료형에 적용할 수 있다. 이것은 타입 인트로스펙션이라고 부르는 더 일반적인 개념의 C 특수화이다. 델파이 ( 오브젝트 파스칼 ) 같은 다른 프로그래밍 언어들에서도 비슷한 메카니즘이 존재한다. 원래 C 디자인에서, 비야네 스트롭스트룹은 이 메커니즘이 자주 오용된다고 생각했기 때문에, RTTI를 포함시키지 않았다. [ 2 ] 목차 1 개요 2 typeid 2. 1 예시 3 dynamic - cast 와Java cast 3. 1 예시 4 같이 보기 5 각주 6 외부 링크 개요 [ 편집 ] dynamic - cast < > 연산과 typeid 연산자가 C에서 RTTI를 구성한다. C 타입 정보는 시에 안전한 형 변환과 타입 조작의 수행을 허용한다. RTTI는 오직 다형적인 클래스들에서 사용가능한데
##니다. 모든 문서는 크리에이티브 커먼즈 저작자표시 - 동일조건변경허락 3. 0에 따라 사용할 수 있으며, 추가적인 조건이 적용될 수 있습니다. 자세한 내용은 이용 약관을 참고하십시오. 미국 및 다른 국가에 등록되어 있는 Wikimedia Foundation, Inc. 소유의 등록 상표입니다. 개인정보 정책 위키백과 소개 면책 조항 개발자 쿠키 정책 모바일 보기
타입 정보(RTTI, Run-Time Type Information 또는 Run-Time Type Identification)는 시 객체의 자료형에 관한 정보를 드러내는 C 메커니즘을 가리킨다. RTTI는 간단한 정수나 문자와 같은 자료형 또는 제네릭 타입에 적용할 수 있다. 이것은 타입 인트로스펙션이라고 부르는 더 일반적인 개념의 C 특수화이다. 델파이 (오브젝트 파스칼)같은 다른 프로그래밍 언어들에서도 비슷한 메카니즘이 존재한다. 원래 C 디자인에서, 비야네 스트롭스트룹은 이 메커니즘이 자주 오용된다고 생각했기 때문에, RTTI를 포함시키지 않았다.