c++多态虚指针

匿名 (未验证) 提交于 2019-12-02 23:32:01
虚指针(vptr)
多态实现的条件:有继承、有virtual重写、有父类指针(引用)指向子类对象。

对象中的虚指针什么时候被初始化

  • 对象在创建的时候,由编译器对vptr指针进行初始化
  • 只有当对象的构造完全结束后vptr的指向才最终确定
  • 父类对象的vptr指向父类虚函数表
  • 子类对象的vptr指向子类虚函数表
构造函数不能为虚函数

执行虚函数时,会调用虚指针指向虚函数表中的虚函数,而虚指针是在对象创建时初始化的,而且当对象构造完全结束后vptr才确定所以此时无法虚指针,因为对象未创建

在构造函数中调用虚函数不能实现多态

因为调用父类构造函数时虚指针指向的是父类的虚函数表

一般情况下基类析构函数需要定义为虚函数

因为当基类指针指向派生类对象时delete时若没有定义虚析构函数会调用父类的析构函数,无法销毁派生部分,当定义了虚函数的时候会调用用虚指针指向虚函数表中的虚函数,会调用派生类析构函数

文章来源: https://blog.csdn.net/weixin_43425693/article/details/89948378
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!