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
[1394] [답변] ZPIKNC86/ TGraphicControl에서…/프포
박지훈.임프 [cbuilder] 3473 읽음    1999-06-01 14:42
안녕하세요. 천리안 프로그래머 포럼 C++Builder 담당 임펠리테리입니다.

말씀하신대로, TGraphicControl이나 TCustomControl의 Canvas 프로퍼티는 protected

로 선언되어 있습니다. 그러니까, 이들 두 컨트롤 클래스에서는 직접 Canvas를 억세

스할 수 없죠. 하지만.. 이 두 클래스는 추상클래스이기 때문에, 어차피 그대로는

사용할 수 없는 것입니다. 예를 들어서,

TCustomControl *MyControl = new TCustomControl(this);

라고 코딩한후 컴파일하면 에러가 날겁니다.

여기서, 어느정도 C++문법을 이해하셔야 하는데, 추상클래스는, 적어도 하나의

순수 가상함수를 가지고 있는 클래스를 말합니다. 여기서 순수 가상함수란,

virtual로 선언해놓은 프로토타입만 존재하고, 그 함수의 바디는 없는 함수를

말하죠. 이렇게 바디가 없는 함수를 선언할 수 있는 이유는, virtual 키워드는

지연바인딩을 지시하는 키워드이기 때문에 컴파일타임에서는 그 바디가 같은

클래스에 존재하든 그렇지 않든 찾아보지 않기 때문입니다. (virtual 함수의

바인딩, 즉 함수의 호출과 호출된 함수의 바디를 연결하는 작업은 런타임에

이루어집니다.)

이렇게 그 클래스 내에 바디가 존재하지 않는 함수의 선언이 클래스 내에 존재할

경우 그 클래스는 추상클래스라고 하며, 그 자체로서 객체를 생성할 수 없습니다.

이런 추상클래스는 반드시 상속받은 클래스에서 바디가 없는 함수를 모두

바디를 추가하여 새로 선언해줘야만 사용가능한거죠. 다시말해서, 상속단계에서만

의미가 있고, 실제로 그 클래스로 객체를 생성할 수 없습니다.

위에서 말한 두 추상클래스의 경우, 멤버중 몇개의 메소드가 추상적으로, 그러니까

바디가 없는 상태로 선언되어 있습니다. 예를 들면, TCustomControl::Paint()

메소드가 그런데, 이렇게 Paint 메소드가 추상적으로 선언된 이유는, 어떤 모양의

컨트롤을 만들지 알수가 없는 상태이므로 그 모양을 그리게 될 Paint 메소드의

바디를 미리 만들어놓을 수가 없는거겠죠?

그러므로, TCustomControl이나 TGraphicControl은 반드시 상속을 받아서 사용하게

되고, 이 상속을 받은 클래스에서 Canvas 프로퍼티를 public으로 재 선언해서

사용하는 것입니다.

그럼 참고하시길...



임펠리테리 박지훈이었습니다.

(cbuilder, cbuilder@thrunet.com)



+ -

관련 글 리스트
1389 [질문] TGraphicControl에서…./프포 zpiknc86 3647 1999/05/31
1394     [답변] ZPIKNC86/ TGraphicControl에서…/프포 박지훈.임프 3473 1999/06/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.