12.6 가상 (함수) 표
#include <iostream>
using namespace std;
class Base
{
public:
virtual void fun1() {};
void fun2 {};
};
class Der : public Base
{
public:
virtual void fun1() {};
void fun3() {};
};
int main()
{
cout << sizeof(Base) << "\n"; // 8
cout << sizeof(Der) << "\n"; // 8
return 0;
}
클래스마다 virtual 함수를 호출하는 포인터를 가지고 있다. Base에서는 자기 자신의 virtual 함수를 호출하는 방식이고 중요한 것은 자식 클래스에서인데, 부모 클래스의 virtual 함수 표 포인터를 타고 가서 fun1()을 호출하는 방식이다. fun1()의 경우 Der 클래스에도 있기 때문에 Der 클래스의 fun1()을 실행시키고, fun2()는 Base 클래스의 함수를 호출한다.