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
[3347] Re:Re:임프님께 질문을 드립니다
백수 [] 3339 읽음    2000-04-17 00:00
: 임펠리테리입니다.
:
: TButton *B = new TButton(ownerCtrl);
: TButton *C = new TButton(*B); //not allowed!!
: 이게 왜 안되느냐구요? 간단하죠. TControl의 생성자에 넘겨지는 인자, 즉 Owner가 원래 TComponent *형이기 때문입니다. 그 이하로 TComponent 에서 상속을 받는 TControl이나 TWinControl 등등도 모두 동일하게 Owner로서 TComponent * 형의 인자를 받습니다.
: 간단히 말하면, "함수(생성자)의 선언이 그렇게 되어있으니 다 그렇게 써야 된다"라고.. 문법적으로는 그렇게 설명할 수 있겠죠.
:
: 생성자의 인자인 Owner를 이렇게 선언해놓은 데는 물론 이유가 있습니다. Owner의 역할이 있기 때문이죠. Owner는 Owner 자신이 파괴될 때 자신을 Owner로서 설정해놓은 모든 컴퍼넌트들을 몽땅 끌고 동반자살하는 역할을 합니다. 예를 들어서,
: TPanel *MyPanel = new TPanel(this);
: 만약 이 코드가 폼 클래스의 함수에 있다면 this는 그 폼에 대한 포인터가 되겠지요? 이 경우에는, 별도로 이 MyPanel을 delete 해주지 않더라도 this인 폼이 파괴될 때 MyPanel도 함께 파괴됩니다. 이것이 Owner로 지정된 컴퍼넌트의 역할입니다.
:
: 아마도 님께서는 일반적인 클래스의 객체 자체를 대입하는 생성자의 역할과, vcl에서의 생성자의 역활과를 혼동하신 거 같습니다. 일반적으로 클래스의 객체 자체(포인터가 아닌)를 대입하는 연산을 하게 되면, 보통은 생성자 내부에서 넘겨진 객체의 멤버들의 값으로 현재 생성중인 클래스의 멤버들의 값을 같게 세팅하는 역할을 하도록 만들죠. 물론 그렇게 하고 말고는 프로그래머의 맘입니다.
:
: 그럼 참고하시길...

답변해주셔서 감사합니다.
파생클래스에서 기반클래스로 포인터를 넘겨주는것이었군요.
씨++빌더에 들어있는 예제중에 신기한것이 있더군요.
폼클래스의 생성자가 가상으로 선언된 것이었습니다.
제가 가지고 있는 책에는 분명 생성자는 가상이 될수 없다고 나왔습니다.
컴파일 해보면 아무 문제 없이 잘 실행됩니다.
씨++빌더에서만 생성자가 가상으로 선언되는것을 허용하는 것인가요?
델파이에서 객체의 참조를 선언하는 방법을 알고싶습니다.
마지막으로 왜 볼랜드는  VCL을 씨++ 클래스 로 변환하지 않고
그대로 씨++빌더에서 사용케 했는지 이유도 가르쳐 주세요.
그럼 안녕히 계세요.

+ -

관련 글 리스트
3339 임프님께 질문을 드립니다 백수 3430 2000/04/17
3346     Re:임프님께 질문을 드립니다 박지훈.임프 3525 2000/04/17
3347         Re:Re:임프님께 질문을 드립니다 백수 3339 2000/04/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.