C++中的多态
多态的定义
同一个函数名,有多种形态
多态的实现
静态多态:函数重载、运算符重载(地址早绑定,在编译阶段就分配了函数地址)——重载:函数名相同,参数列表不同
动态多态:利用虚函数进行子类成员函数的重写——重写:返回值类型、函数名、参数列表完全相同
虚函数实现
在父类的成员函数前面加一个virtual,这个函数就是一个虚函数,子类继承父类时可以重写虚函数,当父类的指针或引用指向子类对象时,发生多态
内部原理
- 在父类中定义一个虚函数的时候,相当于创建了一个虚函数表指针vfptr,这个指针是指向一个虚函数表vftable的,表里存放的是父类成员函数的地址;
- 当子类重写父类的虚函数时,会将虚函数表中的父类成员地址覆盖成自己的成员函数地址;
- 当父类的指针或引用指向子类对象时,发生多态;也就是当调用虚函数时,会根据不同的类对象去调用不同的函数