C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[62208] Re:조언부탁드립니다...
aaa [] 921 읽음    2010-08-19 16:49
가상함수가 있는 클래스에 대해서 한 가지만 말씀드릴게요.
포인터나 참조가 가리키는 최종 객체의 형이 기초클래스인지 파생클래스인지 컴파일 타임에 알아내기가 너무 복잡하거나 불가능한 경우가 있어요.
예를 들어, 함수 인자로 넘어온 경우나 조건문 등에 따라 대입한 후 조건 블럭을 벗어나면 그렇게 되지요.
그런 경우에는, 실행시간에 실시간으로 최종 객체의 형을 판단한 후 그에 맞는 함수를 호출하거나 해야 해요.
따라서, RTTI가 필요하죠.


질문 님이 쓰신 글 :
: RTTI에 대해 공부를 하였습니다
: RTTI가 실행중에 객체의 정보를 얻는 것을 말하는것 같은데
: 근데 이해가 안되는게 몇가지 있습니다

: 1. 왜 RTTI가 필요한가??
:    -> 다형성 (같은 이름 다름 기능) 즉 virtual와 같은 가상함수를 자식 클래스에서 각각 재정의했을경우
:       그리고 부모 클래스에 자식클래스를 할당 했을 경우
:       즉) MainClass* main = new chaildClass; 이런식으로 선언을 했을 경우 RTTI를 사용해서 main이 
:           chaildClass의 객체라는 것을 알려주는 것인데...이게 왜 굳이 필요한건가요??
:       애초에 정의를 할 때 자식 클래스를 할당을 했는데 굳이 이것이 내가 맞게 자식 클래스를 할당했을지
:       단순히 확인을 위해 사용된다는데(인터넷 찾아보니 RTTI설명한 것중에 나와있었음) 단순히 이 이유만은 아닐 것
:       같아서요...
:       그런데 MFC 속성 창을 보니 런타임 형식 정보 사용을 예라고 설정되어 있더라구요 즉 이말은
:       MFC에서는 RTTI를 사용하겠다는 소리이고.. RTTI를 사용하는 곳이 BEGIN_MESSAGE_MAP, END_MESSAGE_MAP 뭐
:       이런 define문에서 사용되는것 같은데 맞나요?? (RTTI 예제 중 define처리해서 표현한게 있길래 추측입니다)
:       그렇다면 왜 MFC에서는 RTTI를 어떤 경우에 왜 사용을 하는것인지 궁금합니다...
:       사용방법이나 예제 같은건 쉽게 구해서 공부를 했는데 정작 이것이 왜 필요한지 왜 사용되는지는 잘 설명이
:       되어 있질 않더라구요...
: 2. RTTI는 가상테이블에만 존재한다??
:    -> 가상함수를 사용하는 클래스에 국한되어 사용되도록 되어 있으니 가상함수테이블에 RTTI가 저장되는건
:       이해가 갑니다 그런데 이 RTTI를 어떤식으로 호출하게되는건가요??

:
:       가상함수를 정의되어 있는 클래스를 b라고 객체선언을 했을 경우 메모리상에 가상테이블을
:       가리키는 포인터 값을 가지고 있고 이 포인터 값을 따라가면 가상함수테이블 해당 클래스가 가지고 있는
:       가상함수의 주소를 배열처럼 쭉 가지고 있는데 그럼 RTTI는 가상함수 주소값 처럼 RTTI주소값(?)이 가상함수
:       테이블에 나타나 있는건가요?? RTTI가 가상함수 테이블에 어떤 형태로 저장되어 있는지 궁금합니다...
: 3. 용어 정리
:    -> RTTI가 실행중에 객체의 정보를 얻는 것을 말하는것이라는데 RTTI 자체가 어떤 건가요?
:       클래스 타입인건가요?? 아니면 그냥 용어인가요?? 아니면 객체(?)인가요??
: RTTI라는 새로운 개념에 대해 이것저것 알아가고 있는데 위의 질문에 대한 답은 잘 없네요...
: 3번 질문에 대해서 어떤 분이 언어의 기능, 혹은 컴파일러의 기능을 칭하는 명칭이라고도 하는데...이게 무슨뜻인지
: 이해가가질 안아서 같이 문의드립니다...

+ -

관련 글 리스트
62197 조언부탁드립니다... 질문 952 2010/08/18
62208     Re:조언부탁드립니다... aaa 921 2010/08/19
62198     Re:조언부탁드립니다... Lyn 975 2010/08/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.