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
[12675] Re:[질문]어제도 말씀드린것인데. inherited에 관한것입니다.
박지훈.임프 [cbuilder] 977 읽음    2001-11-15 03:18
자꾸 로렌조님과 의견이 갈리는데.. 죄송하긴 합니다만, 일부러 그러는 것은 아니니까 이해해주시길..

오브젝트 파스칼에서 inherited는 오버라이드한 원래의 함수를 호출하는 구문입니다.
그러니까, 함수 myfunc()를 갖는 클래스 a를 클래스 b가 상속받고, 클래스 b에서는 원래의 myfunc()를
오버라이드해서 재정의한 경우, b::myfunc() (재정의된 클래스 b의 myfunc 함수)에서는 경우에 따라
원래의 함수인 a::myfunc()를 호출해야 할 수도 있고, 아닐 수도 있습니다.
원래의 a::myfunc()를 호출해야 하는 경우, 그 함수를 호출하는 문법이 inherited입니다.
그러니까, 간단히 말하면, inherited는 상속받은 조상 클래스에서 같은 이름의 함수를 호출하는 기능을 합니다.
그런데 오브젝트 파스칼에서의 inherited에 해당하는 문법이 C++에는 없답니다.

그러므로 말씀하신 코드중에서 inherited 는...
Parent->CMParentColorChanged(Message);
가 아니라,
(상속받은클래스이름)::CMParentColorChanged(Message);
이렇게 바꾸어야 문법적으로 똑같습니다.

그런데...
오버라이드해서 재정의하는 함수가 질문하신 CMParentColorChanged 함수처럼 메시지 처리함수일 경우에는,
(상속받은클래스이름)::CMParentColorChanged(Message);
이렇게 같은 이름의 함수를 직접 호출하기 보다는, 상위 클래스의 Dispatch() 함수를 호출하는 것이 더 좋습니다.
(상속받은클래스이름)::Dispatch(&Message);

이 Dispatch() 함수는 모든 VCL 클래스에서 궁극적으로 메시지를 처리하는 함수입니다.
일단 이넘한테 넘겨주기만 하면 지가 다 알아서 처리합니다.
이 Dispatch() 함수와 메시지 처리에 대한 내용이... 팁 게시판에 있으니 참고하시구요.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=tip&no=43

그럼 이만...

이단자 님이 쓰신 글 :
: 현재 상황이 이렇습니다.
:
: 헤더에는.
: typedef TCustomControl inherited; 이렇게 적혀 있고..
:
: pas에는
: 함수 제일 위에
: inherited 라고 적혀 있습니다.
: 예를 들어.
: procedure TASControl.CMParentColorChanged(var Message: TWMNoParams);
: begin
:   inherited;
:
:   Invalidate;
: end;
:
: 라고 적혀 있습니다.
: 이것을 C++빌더식으로 바꾼다면 어떻게 해야 하나요??
: void __fastcall TASControl::CMParentColorChanged(TWMNoParams &Message)
: {
:    inherited;
:    Invalidate();
: } 이렇게 해도 안되고
: 그렇다고 이렇게 하자니
: void __fastcall TASControl::CMParentColorChanged(TWMNoParams &Message)
: {
:    Parent->CMParentColorChanged(Message);
:    Invalidate();
: } 저 함수가 private로 되어 있어 접근이 안되고
:
: 좀 가르쳐 주세요.. 어떤식으로 해야 하는거죠?
:
:

+ -

관련 글 리스트
12651 [질문]어제도 말씀드린것인데. inherited에 관한것입니다. 이단자 841 2001/11/14
12675     Re:[질문]어제도 말씀드린것인데. inherited에 관한것입니다. 박지훈.임프 977 2001/11/15
12652     Re:[질문]어제도 말씀드린것인데. inherited에 관한것입니다. 로렌조 805 2001/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.