一、虚函数和普通函数的区别
下面我们通过一道题来阐明这个问题:
- 下面编译为 32 位程序的运行结果是什么()A. 编译报错 B. 运行报错 C. 8 D. 12
class Base {
public:
virtual void Func1() {
cout << "Func1()" << endl;
}
protected:
int _b = 1;
char _ch = 'x';
};
int main() {
Base b;
cout << sizeof(b) << endl;
return 0;
}
正常对于一个类来说,他的成员函数所占内存总和再内存对齐之后就是其类内存大小,我们试着来看一下这个带虚函数类的内存大小:
12
正常来说是 1+5 然后内存对齐为 8,可是其运行结果是 12,为什么会这样呢? 我们监视窗口调试一下:

咦?这个 _vfptr 是什么东西?没错,像是上方提到的,对象中的这个指针我们叫做虚函数表指针(v 代表 virtual,f 代表 function)。一个含有虚函数的类中至少都有一个虚函数表指针,因为一个类所有虚函数的地址要被放到这个类对象的虚函数表中,虚函数表也简称虚表。
二、多态的原理
多态是如何实现的







