问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

构造函数为什么不可以声明为虚函数?

发布网友 发布时间:2022-04-30 15:46

我来回答

4个回答

热心网友 时间:2022-06-26 16:57

因为当一个构造函数被调用时,它做的首要的事情之一是初始化它的VPTR。
因此,它只能知道它是“当前”类的,而完全忽视这个对象后面是否还有继承者。当编译器为这个构造函数产生代码时,它是为这个类的构造函数产生代码——既不是为基类,也不是为它的派生类(因为类不知道谁继承它)。所以它使用的VPTR必须是对于这个类的VTABLE。
而且,只要它是最后的构造函数调用,那么在这个对象的生命期内,VPTR将保持被初始化为指向这个VTABLE, 但如果接着还有一个更晚派生的构造函数被调用,这个构造函数又将设置VPTR指向它的 VTABLE,等.直到最后的构造函数结束。
VPTR的状态是由被最后调用的构造函数确定的。
这就是为什么构造函数调用是从基类到更加派生类顺序的另一个理由。
但是,当这一系列构造函数调用正发生时,每个构造函数都已经设置VPTR指向它自己的VTABLE。如果函数调用使用虚机制,它将只产生通过它自己的VTABLE的调用,而不是最后的VTABLE(所有构造函数被调用后才会有最后的VTABLE)。

热心网友 时间:2022-06-26 16:58

没有想过语法为什么这么定义,不过实际中确实有这种需求,实现的方法是工厂模式(Factory)。

热心网友 时间:2022-06-26 16:58

构造函数不能声明为虚函数的原因是:
所谓虚函数就是多态情况下只执行一个,而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象,如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造,还有一个原因就是为了防错,试想如果你在子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错.
------
子类继承了父类的public方法以后,当然可以在public中添加新的方法和属性(属性一般放在private或者protect里面),这是继承的基本用法哦

热心网友 时间:2022-06-26 16:59

虚函数的意思就是开启动态绑定,程序会根据对象的动态类型来选择要调用的方法。然而在构造函数运行的时候,这个对象的动态类型还不完整,没有办法确定它到底是什么类型,故构造函数不能动态绑定。(动态绑定是根据对象的动态类型而不是函数名,在调用构造函数之前,这个对象根本就不存在,它怎么动态绑定?)

如果要保留原来函数的功能,并且还要新添功能的话,可以在子类重载父类的这个函数,并在子类的这个函数中,通过“父类::函数名()”先调用父类的版本,然后再在后面加自己的东西。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 虚函数的作用,为什么构造函数不能是虚函数 大学生刚毕业都有什么工作适合做? DNF手游技能设置都有哪些技巧,让刷图PK都能占优势? DNF手游新手有什么小技巧 有哪些工作最适合刚毕业的大学生?这样的岗位多吗? DNF手游徽章怎么合成以及镶嵌 dnf手游韩服12+怎么打不开 dnf手游韩服怎么创建角色? DNF手游英雄级BOSS怎么打 有哪些适合刚毕业的大学生了解的工作?有推荐的吗? dnf手游新手入门有哪些知识 DNF手游超级福利:定制称号果然不凡,三个步骤免费领取!如何领取? 大学生毕业后除了去银行和当公务员,还有什么工作是比较稳定的? DNF手游王的遗迹怎么过 韩服dnf手游90611怎么解决 DNF手游勇士创建营条件? DNF手游七骑士秘密降临怎么打 DNF手游韩语怎么打 热火17号球员是谁 很久以前看的一部电影,讲的是一个女孩子打橄榄球的故事,片名忘了,有谁知道啊? 构造函数可以调用虚函数吗?语法上通过吗 构造函数为什么不建议调用虚函数 黎族是否存在本民族语言? 构造函数(析构函数)中调用虚函数 黎族和彝族的区别是什么? 黎族资料 c++ 构造函数里可以调用虚函数吗 黎族山歌是传承的第一文化,但是黎族只有语言没有文字,这是为什么? C++中虚构造函数及其用途 我国现行少数民族文字有多少种?都有哪些? 黎族人的民族语是什么语言?拜托各位大神 虚函数的定义 卡通长颈鹿头简笔画哪些颜色 长颈鹿简笔画头朝左 黎族和汉族有什么区别?? 黎族简介 黎族的文字、相关图片资料 谁有黎族的习俗资料啊? 黎族的介绍 关于黎族