多态的基本概念
1.多态是指允许一个接口被多种类型的对象使用,通常通过继承和重写实现
2.在C++中,多态的实现依赖于虚函数
多态的实现
1.父类提供数据成员和成员函数,子类继承并重写父类的函数
2.函数参数为父类指针,可以传递父类对象或子类对象
3.当传递父类对象时,调用父类的函数
当传递子类对象时,调用子类的函数
虚函数与多态性
1.实现多态性的前提是使用虚函数
2.普通函数不能实现多态性,因为它们的函数地址在编译时已经确定
3.虚函数在运行时动态绑定,根据实际对象类型调用相应的函数
虚函数的间接调用
1.虚函数的调用形式为间接调用
2.编译器为虚函数生成间接调用的汇编代码
3.间接调用时,函数地址存储在对象的虚表中,根据虚表地址进行调用
虚表与对象大小
1.含有虚函数的类对象会增加四个字节
2.这四个字节用于存储虚表的地址
3.虚表存储了函数的地址,用于实现多态性
虚表的结构与内容
1.虚表是一个包含函数地址的表
2.虚表中存储的函数地址根据实际对象类型进行动态绑定
3.虚表的地址存储在对象的最开始位置
虚表的动态绑定
1.当调用虚函数时,根据对象的虚表地址进行动态绑定
2.虚表中的函数地址根据实际对象类型进行选择
3.实现了多态性的正确调用