多态是指同一名字的函数调用时根据对象的不同使用不同的实现,程序在执行中寻找相应的函数地址进行执行,也叫动态绑定。父类调用子类函数时,父类指针有多种形态。
多态的实现是靠指针和虚函数,本质是虚表和虚指针;
在父类的函数声明为虚函数后,其派生类的该函数都是虚函数,不需要再显示声明了;
在创建类的对象时,会为每个对象提供一个虚表指针,指向该对象所属类的虚表;
虚表的创建和虚表指针的初始化在类的对象实例化时调用构造函数时进行,因此实例化基类对象时,创建的虚表只能是基类的,子类对象创建时才能创建自身的虚表和初始化自身的虚表指针。
派生类的虚表继承基类的虚表,两者地址排列顺序相同,同时也可以添加自己的虚函数的地址。
纯虚函数,将虚函数只声明,不定义,由派生类来进行定义,属于接口,是个函数声明,同时纯虚函数必须在子类里实现。