=0
virtual void function() = 0;
在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重写以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题
使用时需注意
首先,定义一个函数为虚函数,不代表函数为不被实现的函数。 定义它为虚函数是__为了允许基类的指针来调用子类的这个函数__。
定义一个函数为__纯虚函数,才代表函数没有被实现__ 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。
override:保证在派生类中声明的重载函数,与基类的虚函数有相同的签名
override
当派生类函数声明加了override修饰,则明确表示该函数为重写虚函数,如果该函数与基类的虚函数签名不一致,编译器就会报错
final:阻止类的进一步派生 和 虚函数的进一步重写
final
如果不希望某个类被继承,或不希望某个虚函数被重写,则可以在类名和虚函数后加上 final 关键字,加上 final 关键字后,再被继承或重写,编译器就会报错。因此,一旦一个虚函数被声明为final,则派生类不能再重写它
静态关联 静态关联 (static binding) 指通过对象名调用虚函数. 在编译时即可确定其调用的虚函数属于哪一类
动态关联 动态关联 (dynamic binding) 是指通过基类指针与虚函数, 在运行阶段确定关联关系. 动态关联提供动态的多态性, 即运行阶段的多态性.
参考文献: C++虚函数_哔哩哔哩_bilibili C++中的虚函数详解_爱笑的七小沐的博客-CSDN博客_c++虚函数 # 图解虚函数的内存模型和继承方式,虚函数表指针、虚函数表、多继承、多重继承、菱形继承、虚继承