参考https://www.cnblogs.com/yanqi0124/p/3829964.html
一、含有虚函数的类的sizeof
假设一个类含有虚函数,那么它就有个隐藏的虚表指针。
比如
class Base {
int a;
virtual void f() {}
virtual void g() {}
virtual void h() {}
};
// win32下,sizeof(Base) = 8;也就是int的4个字节和虚表地址的4个字节。
若有声明了Base b;则示意图如下:指向虚函数表的指针在对象b的最前面。
二、非虚继承
(1)如果是单继承,则派生类只含有一个虚函数表。如果派生类重写了基类函数,则在虚函数表中函数地址被替换;如果派生类有新的自己的虚函数,则追加到虚函数表中;如果派生类新定义了一个和基类虚函数同名的函数,但是函数参数却不同,则在派生类中,该基类同名函数被隐藏(这一点要注意)。
class Derived: public Base
{
public:
virtual void f1() { cout << "Derived::f1" << endl; }
virtual void g1() { cout << "Derived::g1" << endl; }
virtual void h1() { cout << "Derived::h1"</