1、虚函数
虚函数作用:用于实现动态联编,让程序选择特定类型设计的方法(个人定义)
基本特点:非构造函数;
基类的为虚函数,子类重新定义的为虚函数。
2、虚析构函数(示例)
虚析构函数的作用 : 基类采用virtual虚析构函数是为了防止内存泄漏。(也有人说除非不当做基类)
场景解释:如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存泄漏。所以,为了防止这种情况的发生,C++中基类的析构函数应采用virtual虚析构函数。
3、虚表(virtual function table ,vtbl)
虚表:在有虚函数的类中,隐藏的 一个指向虚函数地址数组的指针 的成员。(个人定义)
特点:每个类都会创建一个虚表,根据是否添加新的虚函数决定是否会在保存的原本的虚表地址后方添加地址成员,根据是否重新定义虚函数,决定是否更改新的地址;
每个虚函数的调用都会进行查表;
4、动态联编和静态联编
静态联编效率较高,原因是:动态联编的时候需要使用虚表,虚表需要在表中查找对应虚函数的地址。
参考文章:虚表的详细解释