文章目录
c++的多态是如何实现的:
c++的多态是通过虚函数动态绑定实现的。
含有虚函数的类都有一个一维的虚表,存放虚成员函数指针。
当子类没有对父类虚函数重写时,子类虚表存储的是父类虚函数;
当子类对父类虚函数重写时,子类虚表存储的是自己的虚函数;
当子类有独立于父类的新的虚函数时,将新虚函数地址添加在表的后面。
动态绑定:
动态绑定只有当我们通过指针或引用调用虚函数时才会发生。
1.编译器发现父类有虚函数时,会自动为每个含有虚函数的类生成虚函数表。
2.每个对象的前四个字节中保存虚函数表指针vptr,指向对象的虚函数表vtable。
3.在调用构造函数时创建并初始化虚函数表。在创建子类对象时,会先调用父类构造函数,此时编译器只能看到父类,这时为父类对象初始化虚表和虚表指针;当调用子类构造函数时,初始化子类虚表以及虚表指针。