class Class1
{
public:
m_data1;
m_data2;
memfunc();
virtual vfunc1();
virtual vfunc2();
virtual vfunc3();
};
Class1 object instance:
━━━━━━━━━
┃vptr┃ ──> vtable
━━━━━━━━━ ━━━━━━━━━
┃ m_data1 ┃ ┃ (*vfunc1)() ┃──>Class1::vfunc1()
━━━━━━━━━ ━━━━━━━━━
┃ m_data2 ┃ ┃ (*vfunc2)() ┃──>Class1::vfunc2()
━━━━━━━━━ ━━━━━━━━━
┃ (*vfunc3)() ┃ ──>Class1::vfunc3()
━━━━━━━━━
class Class2: public Class1 {
public:
m_data3;
memfunc();
virtual vfunc2();
};
Class2 object instance:
━━━━━━━━━
┃vptr┃──> vtable
━━━━━━━━━ ━━━━━━━━━
┃ m_data1 ┃ ┃ (*vfunc1)() ┃──>Class1::vfunc1()
━━━━━━━━━ ━━━━━━━━━
┃ m_data2 ┃ ┃ (*vfunc2)() ┃──>Class2::vfunc2()
━━━━━━━━━ ━━━━━━━━━
┃ m_data3 ┃ ┃ (*vfunc3)() ┃──>Class1::vfunc3()
━━━━━━━━━ ━━━━━━━━━ Class2::memfunc();