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
[24784] Casting이란!!
둘리 [dooly] 962 읽음    2003-03-19 17:04
CBuilder Component Class들은 상속형 입니다.
예를들어 TEdit를 보면
TObject - TPersistent - TComponent - TControl - TWinControl - TCustomEdit
를 차례로 상속 받습니다.

또한 모든 component class 는 공통적으로 TComponent 이상의 (TComponent 포함) class를 상속 받으므로 TComponent로 모든 component는 casting이 됩니다..

여기서 casting이라는것은?? (이게 질문이시죠?)

casting이란 형변환입니다.
다음을 보면

int a = 10;
double b;

b = a;   이럴경우는 값을 변환하는 거지만 사실 형변환도 됩니다.

b = (double ) a ; 이렇게 해야 원래의 규칙에 맞겠죠..

이런 형식으로 pointer class역시 형변환할 수 있습니다.

다음을 보시면.

TEdit *a = new TEdit(Owner);
void *b = (void *)a;
TEdit *c = (TEdit *)b;

이렇게 하면 c 는 결국 a를 지칭합니다. 이과정에서 형변환(type casting)이 들어 갑니다.

그럼 component의 경우 상속되는 형식이므로
어떠한 component든 TComponent를 상위 클래스로 갖고 있읍니다.

가령 두개의 컴포넌트가 있다고 합니다.
(TEdit 와 TComboBox)

TEdit *a;
TComboBox *b;

위의것들이 메모리에 할당 되어 있다고 본다면.
TComponent *aa = (TComponent *)a;
TComponent *bb = (TComponnet *)b;

이렇게 casting 한다면 aa 와 bb는 서로 같은 레벨(TComponent 까지)의 부모수준에서
같은 메모리의 구조를 갖습니다.
해당 component의 help를 보시면 Hierarchy별 method 와 property 가 구본되어 나오니
참고하셔서 사용하시면 됩니다.

간단한 예로 다음코드를 보시면 가장 쉬을듯..

TEdit 와 TComboBox 가 같은 OnChange Event로 묶여 있다면

해당 event로 TObject *Sender가 올겁니다.

{
    TComponent *p = (TComponent *)Sender; // casting 합니다.
    AnsiString name = p->ClassName();     // class name취득합니다.
   
    if(name=="TEdit"){
       TEdit *pe = (TEdit *)p;
       // TEdit로서 처리
       }
    if(name=="TComboBox"){
       TComboBox *pc = (TComboBox *)p;
       // TComboBox로서 처리
       }

     // 기타 다른 컴포넌트를 연결하심 계속 이어 나가시면 되고요..
     // 공통 데이터 tag 라든지 Name 이라든지 하는것들은 궂이 해당 Combonent로 취득하지않고
     // 공통 부모 클래스로 casting하신후 사용하심 됩니다.



}

















+ -

관련 글 리스트
24779 이넘이 어떤넘인지 알수 있는 방법은 없나요? 강영준 787 2003/03/19
32094     Re:이넘이 어떤넘인지 알수 있는 방법은 없나요? 강영준 867 2003/03/19
32093     Re:이넘이 어떤넘인지 알수 있는 방법은 없나요? 둘리 831 2003/03/19
32092     Re:이넘이 어떤넘인지 알수 있는 방법은 없나요? 둘리 924 2003/03/19
32091     Re:이넘이 어떤넘인지 알수 있는 방법은 없나요? 둘리 750 2003/03/19
32090     Re:이넘이 어떤넘인지 알수 있는 방법은 없나요? 둘리 823 2003/03/19
32089     Re:이넘이 어떤넘인지 알수 있는 방법은 없나요? 머리돌 840 2003/03/19
32088     Re:이넘이 어떤넘인지 알수 있는 방법은 없나요? 둘리 843 2003/03/19
32087     Re:이넘이 어떤넘인지 알수 있는 방법은 없나요? 머리돌 872 2003/03/19
24784     Casting이란!! 둘리 962 2003/03/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.