상속 관계에 있는 클래스에 관한 질문입니다
글쓴이: luminas / 작성시간: 화, 2006/11/28 - 10:39오전
class CBase{
public:
int base_var;
virtual base_func();
};
class CDerived : public CBase{
public:
int derived_var;
virtual derived_func();
};
CBase* parent = new CDerived;
다음과 같이 parent에 CDerived의 인스턴스를 할당하게 될 때,
메모리 상에 base_var의 위치와 가상함수 테이블이 어떻게 생성이 되나요?
만약 CDerived*의 인스턴스를 생성 후 CBase*로 업캐스팅을 할 경우 CDerived*의 가상함수 테이블에
대한 포인터만 넘겨준다고 알고 있습니다만...애초에 CDerived의 인스턴스를 할당하면
base_var과 derived_var의 생성 여부와 메모리상의 위치(순서), base_func()과 derived_func()의 생성 여부 등이 궁금하네요.
Forums:
메모리 레이아웃은
메모리 레이아웃은 다음과 등가입니다.
virtual function table은
Base/Derived class 각각 글로벌 변수(data segment에)로 잡힙니다.
여기를 참고하세요.
http://en.wikipedia.org/wiki/Virtual_function_table
___________________________________
Less is More (Robert Browning)
___________________________________
Less is More (Robert Browning)
가상함수 테이블의
가상함수 테이블의 세부적인 구조는 제가 알기로 구현체 마음이므로 특별히 가상함수 테이블을 가지고 조작해보실려고 하는것은
별로 추천하지 않습니다.
컴파일러마다 다를수 잇으므로 이식성이 떨어지게 됩니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기