ref:https://www.cnblogs.com/jin521/p/5602190.html
在C++中,多态是利用虚函数来实现的。
动态多态:不同对象对于同一方法的不同相应。
基类函数中定义虚函数,可以通过传入的指针或引用来调用基类中同名方法。
虚函数表指针:类中除了定义的函数成员,还有一个成员是虚函数表指针(占四个基本内存单元),这个指针指向一个虚函数表的起始位置,这个表会与类的定义同时出现,这个表存放着该类的虚函数指针,调用的时候可以找到该类的虚函数表指针,通过虚函数表指针找到虚函数表,通过虚函数表的偏移找到函数的入口地址,从而找到要使用的虚函数。
当实例化一个该类的子类对象的时候,(如果)该类的子类并没有定义虚函数,但是却从父类中继承了虚函数,所以在实例化该类子类对象的时候也会产生一个虚函数表,这个虚函数表是子类的虚函数表,但是记录的子类的虚函数地址却是与父类的是一样的。所以通过子类对象的虚函数表指针找到自己的虚函数表,在自己的虚函数表找到的要执行的函数指针也是父类的相应函数入口的地址。
class Shape
{
public:
....
virtual ~Shape();
private:
....
};
class Circle:public Shape
{
public:
virtual ~Circle();//与虚函数相同,此处virtual可以不写,系统将会自动添加,建议写上
....
};
....```
网友评论