#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 클래스의 함수를 호출한다.