C++ 中virtual 用于修饰函数,标记函数可以动态绑定
- 虚函数
- 纯虚函数(基类为抽象类)
虚函数表
编译器会给带虚函数的类添加一个虚函数表指针
1 | class Base { |
基类和派生类中虚函数内存示意图
From : https://www.cnblogs.com/hushpa/p/5707475.html
附:C++中的类所占内存空间
类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数(这是笼统的说,后面会细说)是不计算在内的。
class CBase {}; //sizeof(CBase)=1; (C++要求每个实例在内存中都有独一无二的地址)
class CBase { int a; char p; }; //sizeof(CBase)=8; (4字节对齐)
class CBase { public: CBase(void); virtual ~CBase(void); //sizeof(CBase)=12 (虚拟函数表指针_vptr占4个字节)
private: int a; char *p; };
class CSub : public CBase { public: CSub(void); ~CSub(void); virtual void test(); //sizeof(CSub)=16 (Base12+Sub4 以及共用_vptr)
private: int b; };
static修饰的静态变量:不占用内容,原因是编译器将其放在全局变量区。