1.什么是多态?
通过父类的指针调用实际子类的成员函数,使父类的指针有多种形态。
2.多态通过什么实现的?
通过虚函数重写完成的。多态是基于虚函数,虚函数需要重写。
3.多态实现原理?
通过维护一个虚函数列表(v_table),表的每个元素都是一个函数指针,函数指针指向虚函数,或者重写的虚函数(子类重写了,把这个元素覆盖),还需要记录这个表的指针(vfptr),创建的对象是谁这个指针就指向谁的表
v_table:在编译期存在,所有对象共用这一个表。
vfptr:在创建对象的时候存在的,是父类中第一个成员,在构造函数里面初始化,指向自己类的表。
4.多态优点?
复用,扩展
5.多态缺点?
空间,效率,安全性。
6.多态什么时候用?
统一类型,多个类都包含一个共同的功能,但是实现方式不同,这个函数就要用虚函数。