为什么析构函数可以为virtual型,而构造函数则不能?

构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数。

不建议在构造函数和析构函数里面调用虚函数。

构造函数不能声明为虚函数的原因是:

解释一:所谓虚函数就是多态情况下只执行一个。而从继承的概念来讲,总是要先构
造父类对象,然后才能是子类对象。如果构造函数设为虚函数,那么当你在构造父类
的构造函数时就不得不显式的调用构造。还有一个原因就是为了防错,试想如果你在
子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被
覆盖,也即不能完成父类的构造.就会出错。

解释二:虚函数的主要意义在于被派生类继承从而产生多态。派生类的构造函数中,
编译器会加入构造基类的代码,如果基类的构造函数用到参数,则派生类在其构造函
数的初始化列表中必须为基类给出参数,就是这个原因。虚函数的意思就是开启动态
绑定,程序会根据对象的动态类型来选择要调用的方法。然而在构造函数运行的时
候,这个对象的动态类型还不完整,没有办法确定它到底是什么类型,故构造函数不
能动态绑定。(动态绑定是根据对象的动态类型而不是函数名,在调用构造函数之
前,这个对象根本就不存在,它怎么动态绑定?)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值