개발/C, C++

1_this4_다중 상속의 멤버함수 포인터

huiyu 2014. 7. 20. 13:29

다중 상속의 멤버함수 포인터

#include <iostream> using namespace std; class A { int a; public: void fa() { cout << "fa : " << this << endl; } }; class B { int b; public: void fb() { cout << "fb : " << this << endl; } }; class C : public A, public B{}; int main() { C c; cout << &c << endl; void (C::*f)(); cout << sizeof(f) << endl; // 8 f = &C::fa; (c.*f)(); f = &C::fb; (c.*f)(); . }

class C는 class A와 class B를 다중 상속받은 클래스이다.

위의 예제에서 C의 멤버함수 포인터를 출력하면 8이 출력됨을 확인할 수 있다.


상속받은 멤버함수의 크기가 8바이트인 이유는 

{함수주소, this offset}을 저장할 두개의 주소가 필요하기 때문이다.

상속받은 클래스는 this가 이동되어서 전달되기 때문에 offset을 기록할 필요가 있다.


f = &C::fa의 경우 {fa주소, 0}으로 채워주고,

f = &C::fb; {fb주소, sizeof(A)}로 채워줍니다.




728x90
반응형

'개발 > C, C++' 카테고리의 다른 글

2_new2_예제  (0) 2014.07.21
2_new1_new,operator new, operator delete  (0) 2014.07.20
1_this3_멤버 변수의 포인터  (0) 2014.07.20
1_this2_함수포인터의 this  (0) 2014.07.20
1_ this1  (0) 2014.07.20