virtual 키워드를 붙여야 가상함수 테이블이 만들어지고
RTTI정보가 가상함수 테이블에 저장이 되며
virtaul 키워드없이 상속하면 캐스팅이 안되서 못써먹는다
그리고 저 테이블에 있는 정보를 이용해 호출할 함수를 결정한다
까지는 알겠는데
왜 c는 B의 가상함수 정보를 가지고 있지 않나요?
c가 a에 대한 가상함수 테이블만 2개 저장되어있는걸로 보이는데 어떻게 된 일인건가요?
virtual 키워드를 붙여야 가상함수 테이블이 만들어지고
RTTI정보가 가상함수 테이블에 저장이 되며
virtaul 키워드없이 상속하면 캐스팅이 안되서 못써먹는다
그리고 저 테이블에 있는 정보를 이용해 호출할 함수를 결정한다
까지는 알겠는데
왜 c는 B의 가상함수 정보를 가지고 있지 않나요?
c가 a에 대한 가상함수 테이블만 2개 저장되어있는걸로 보이는데 어떻게 된 일인건가요?
vtable 주소가 같죠? 그냥 같은거 두번 보여주는겁니다
가상 소멸자를 작성하는 기본에나 충실하자는 드립이고 B와 C에는 virtual을 안적어줘도 됨 다 A에서 선언된거임
그런데 foo2는 a에서 선언된게아니라 b에서 선언된건데 왜 주소가 안보이나요??
디버거 정보에 C::'vftable'[4]로 되어있는거 보면 그냥 잘라서 보여준거 같은데
아하 더 자세하게 보려면 어떻게 봐야되나요?
이게 맞는 듯
조사식에 c->__vfptr[2] 추가하니까 foo2의 주소라고 뜨네요
조사식에 c->__vfptr,4 하니까 잘보임