多态的分类:
(1)静态多态:重载或者模板,在编译时即实现多态;
(2)动态多态:通过继承来实现,派生类继承并重写基类的虚函数,当通过基类的指针来调用该虚函数时,调用的为派生类的函数,动态多态,在运行时实现;
多态的底层知识:
(1)当一个类包含虚函数时,相应的会有它的虚函数表(事实上是一个数组,其中存储着虚函数的地址),即虚函数表是类级别的变量,在类实例化为一个对象时,会产生一个虚函数表指针,该指针指向类的虚函数表;
(2)当子类继承父类时,会复制一份父类的虚函数表,同时由于其重写,则会将表中虚函数的地址替换为重写后的虚函数的地址(虚函数也存放在代码区),至于子类独有的虚函数,其地址也会加在虚函数表中;