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
[62229] Re:조언부탁드립니다...
둘리.CSIEDA [dooly386] 851 읽음    2010-08-23 07:37
가상함수 (virtual) 는 OOP 의 다형성을 구현하기 위한 좋은 방법 입니다.
사실 가상이라는 이름을 붙였을뿐 엄밀히 말하면 "동적결합 함수"라고 하는게 이해가 더 쉽습니다.
별로 주의할 점은 없고요, 만약 memory 관리부분에 있어서 class destructor 를 virtual 로 해 주는 정도?
주의점(항상은 아니고) 이라 할 수 있겠죠.

다음과 같은 예에서 (정확한 c++ 문법은 아닙니다)

class A
{
    A() {  init(); }
    virtual void init(){}
}

class B : A
{
   char *p;
   B() { p = new char[256];  }
   void init() { strcpy(p,"Hello");  }
}

위의 경우 주의 해야 합니다.
B b; 라고 b 객체를 만드는 순간, 프로세스의 흐름은 우선 A 의 constructor로 들어가며 여기서 init() 함수를
호출하게 되는데 이것이 A 의 init() 가 아니라 B 의 init() 를 호출하게 됩니다. 이경우 아직 B의 constructor를
수행하지 않은 상태이기 때문에 p 가 아직 정의 되어 있지 않기 때문에 에러를 냅니다.
주의해야할 간단한것중 하나 입니다.


http://www.winapi.co.kr/ 의 C++ 강좌 , 제 30장 다형성 에 설명이 잘 되어 있습니다.
참고해 보시기 바랍니다.





문의드립니다 님이 쓰신 글 :
: 가상함수를 가진 클래스의 메모리에 가상함수 포인터 테이블을 가리치는 포인터를
: 가지고 있고 실행 중에 그 가상 함수 테이블 주소에 있는 함수를 실행 한다고 알고 있습
: 니다...
:
: 그런데 virtual을 제가 직접 만든다면 어떤 부분을 신경써야될까요??
: virtual을 직접 만든다고 했을 때 막상 구현을 그려보니 머리가 멍해지네요...
:
: 고수님들의 조언 부탁드립니다...ㅠㅜ

+ -

관련 글 리스트
62228 조언부탁드립니다... 문의드립니다 932 2010/08/22
62229     Re:조언부탁드립니다... 둘리.CSIEDA 851 2010/08/23
62239         Re:Re:조언부탁드립니다... 문의드립니다.. 859 2010/08/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.