C++ 不在构造函数和析构函数中调用虚函数

首先在构造函数或者是在析构函数中是可以调用虚函数的。但是我们最好不要这样做。

一、不在构造函数中调用虚函数

当我们在构造函数中调用虚函数时,一定调用的是基类的虚函数,即使此时你定义的是一个派生类的对象。
原因一:
在创建派生类对象时,一定首先调用的基类的构造函数,其次在调用的是派生类构造函数。问题就在于,当程序执行到基类的构造函数时,因为还没有调用到派生类的构造函数,所以此时派生类的成员还处于未初始化的阶段,而在虚函数中几乎可以肯定它会对派生类的成员进行操作,而此时派生类中的成员还没有初始化,那么这在C++中是绝对不可以的,所以它不能在基类中调用派生类的构造函数。
原因二:
在派生类对象的创建中,当他执行到基类的构造函数时,此时C++认为它并不是一个派生类对象,而是把它当做一个基类的对象,而虚函数又是在运行期间动态进行类型检查的,所以此时虚函数检查它为基类类型,所以它调用的就是基类的虚函数。

二、不在析构函数中调用虚函数

在派生类中的析构函数中调用虚函数时,会优先调用派生类中的虚函数,如果派生类中没有对虚函数进行重定义,那么它会调用基类的虚函数。

在基类的析构函数中调用的虚函数一定是基类的,不能调用派生类的,因为此时派生类的成员已经被销毁,所以无法调用。

三、总结

在基类的构造函数中,只能调用基类的虚函数
在派生类的构造函数中既可以调用基类的也可以调用派生类的
在基类的析构函数中,只能调用基类的虚函数
在派生类的析构中,既可以调用基类的,也可以调用派生类的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值