说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请教:构造函数为啥不能是虚函数?

编辑:说三道四文库 发布时间:2017-11-24 08:14
HTML文档下载 WORD文档下载 PDF文档下载
因为构造派生类对象时,会自动调用基类构造函数。而当执行基类构造函数时(即基类对象被构造时),派生类对象还不存在,而如果基类构造函数如果是虚函数,就会调用派生类构造函数,如果派生类构造函数访问了派生类特有的数据(即基类中没有的数据)时,会造成灾难!
同样道理,即使基类的构造函数调用了虚函数,该虚函数也不会执行派生类的代码,而是执行基类中该函数代码。

见 http://localhost/asp/sunidoc.asp?act=-2&article=224 中的一段

[23.1] 当基类构造函数调用虚函数时,为什么不调用派生类重写的该虚函数? 
当基类被构造时,对象还不是一个派生类的对象,所以如果 Base::Base() 调用了虚函数 
virt(),则 Base::virt() 将被调用,即使 Derived::virt() (译注:即派生类重写的虚 
函数)存在。 

同样,当基类被析构时,对象已经不再是一个派生类对象了,所以如果 Base::~Base() 
调用了 virt(),则 Base::virt() 得到控制权,而不是重写的 Derived::virt()。 

当你可以想象到如果 Derived::virt() 涉及到派生类的某个成员对象将造成的灾难的时候, 
你很快就能看到这种方法的明智。详细来说,如果 Base::Base() 调用了虚函数 virt(), 
这个规则使得 Base::virt()被调用。如果不按照这个规则,Derived::virt()将在派生对象 
的派生部分被构造之前被调用,此时属于派生对象的派生部分的某个成员对象还没有被构造, 
而 Derived::virt() 却能够访问它。这将是灾难。
VPTR 的状态是由被最后调用的构造函数确定的!
70%开发者:对现有应用推广和广告并不满意 四种方案:将OpenStack私有云部署到Hadoop MapReduce环境中 扩展PHP的五个简单技巧,让单服务器并行支撑30000用户 硅谷为什么无法复制 PubNub+Cloudinary:简单几步快速搭建实时图片分享应用 影响互联网行业的十大API(信息图) Hadoop+GPU强强联手的性能探索 Eurora获最节能超算殊荣,中国天河2号位列第31 程序员的野心:让GPU像CPU一样运行 Gungho热潮正在逐渐消退? Thalmic创始人专访:穿戴式体感设备MYO背后的开发故事 移动周报:GSMA各种神器,Qt 5.1,Android 4.3,本周惊喜多多! 奇虎360Web平台部基础架构团队访谈:开源线上数据库中间件Atlas 化繁为简:UC优视发布“UC+”开放平台战略 从40亿美元到10亿美元 Hulu的美梦是否又一次成为泡影? 百度开发者俱乐部第六期:BAE3.0开放内测 云编程马拉松启动 微软宣布将于今年9月30日正式关闭MSN TV服务 程序员不应该再犯的五大编程错误 中国开源事业,路在何方? StackOverflow上的编程趋势 Oracle悄然将Berkeley DB许可证更改为AGPL 简单易用,保护隐私:麻省理工的邮件数据挖掘分析工具Immersion Microsoft Ventures进入中国,为云生态系统构建提供加速度! 这是场战争:盘点那些参与智能手表竞争的厂商 三星豪掷80万美元奖金 第二届全球开发者挑战赛开幕 MongoDB Map Reduce速度提升20倍的优化宝典 腾讯云总经理陈磊:可信任云服务背后的技术支撑力 “叫好不叫座”的石墨烯也许会给我们带来更清凉、更长寿的计算机 微软WPC 2013:Windows 8.1将于8月底提供给OEM合作伙伴 TIOBE 2013年7月编程语言排行榜:PHP强势回归 扁平化设计或成下一个流行趋势吗? VB如何调用RAR? 控制台程序中字符串的定义问题 ====高分求助!!===== 請問如何設置table使之在dba studio 看不到但是通過sql/plus可以看到 一个关于表单的简单问题<select name=..>中怎样确定选定的是第几项 ==找错!!! 两行代码,错在哪儿??== 有谁知道SQL SERVER为什么会占用600多M的内存? VB如何调用RAR? ====高分求助!!===== 哪位大侠知道可以下载电子书籍的好网站~~~(当然是关于计算机的。。。) 关于winrunner的delphi插件问题 截取swf动画里面的图片用什么软件,下载地址有吗? 上网速度慢?为何? win2000,安装在C:,NTFS格式,由于误操作,现在无法进入,出现提示为:missing operating system,怎么解决,急!(不想格式化重装) 请问如何在word里嵌入一个工具条 有关对话框的状态栏的问题? 怎样用DOM调用在服务器端动态生成的元素? 昨夜冻的肚子疼,不爽! 散分。 请大家帮帮我,水晶报表问题!! 小弟做了一JSP应放在哪个目录下? 小闪小蹦一把:偶来看看大家了,最近都好吧 :D 请问用什么方法,或什么控件可以实现新闻管理阿? Exception in thread "main" java.lang.NoClassDefFoundError: PrintPen 用jbuilder9编写bean的问题 update 问题谁来帮我看看。 listview的排序问题(在线等,请各位高人指点!) 请问谁做过烧录光盘的程序?谢谢 对FILE进行写操作,怎么FILE原来的内容没有了? 请教一个C#的问题,在线等! 请教Unicode的编码格式 刚刚接触vc,遇到不少问题…… 询问一条语句 如何将文件以binarry的形式存储在ACCESS中的"OLE对象"字段中,急!在线等待!!! 我机上的IE看所有的web页,如代码里有<font>,则字体看起来都变大了,几番变化,郁闷中。。 请问,为什么我输入新纪录,不能保存到数据库中 ODBC 调用失败 C++问题。。求教~ 寻找OA系统的例子和代码 为什么我的TreeView控件每次加载后第一项总处于选种状态? 关于一个SQL的一个语句 成功的在redhat 9.0上装上了oracle 9.2.0 高兴!散分 Jbuilder 9 中控件大小问题!请教各位。 ce上鼠标键盘没有反应 oracle安装的一些问题,发现oracle用户下的/opt/oracle的空间不足?? 由谁做过用电脑发传真到传真机的程序的?疑问 我要做一个幼儿园的网站,谁能提供一个幼儿园网站的FLASH首页的动画呢?谢谢! ?? Database::Master/Detail ---Initialization 大家讨论 com 和 automate 有什么关系 IE中的Applet出错(用的是IE自身的JVM),急! 大家来评一评----美 利 坚 合 众 国 宪 法 IIS下建立的虚拟目录,指向局域网中的电脑,怎样设置网络用户名密码等? 죽음같은고통 求回答! 英语书面表达初三,别写太高深,通俗易懂有点技术就OK作文要求:练习是学习中一个重要环节.通过英语练习,我们可以查缺补漏.拓展知识、提高成绩.但是有人认为做大量的英语练习是增加负担 巧填三国人物1、慢慢做( )2、四面屯粮( )3、孔雀收屏( )4、蓓蕾开放( )5、山东安静( )6、是寡人之过也( )7、弓如满月,箭似流星( )8、欲穷千里目,更上一层楼( )6、是寡人 gone with the wind 句型结构算什么结构,复合结构吗?分析不来? 在南半球东边的地区总比西边的地区先看到太阳吗 你对我太有自信了 这句话有语病吗? "在路上,我很自信,很坚强,正是因为一路上有你们"有语病吗 he loses heart,他丧失信心,这里的lose要不要三单? 나는 당신을 좋아한다 这句怎么翻译? RTA《boyfriend》歌词及翻译 新人,急求bec中级2,3辑的听力 印度发生连环爆炸 致5人死亡25人受世界最高人找到真爱将结婚 两人相差7阿根廷举行中期议会选举 执政联盟面临韩“独岛”宣传片擅自使用日剧画面 视阿根廷国会选举受瞩目 现总统或丧失部美国旧金山湾区万圣节前多起驾车枪击 潘基文强烈谴责刚果(金)反政府武装袭澳富豪小派克投资电影事业 目标瞄准中美国药监局将限制使用多种致瘾性处方止旧金山举办“安全街道日”活动宣传安全男子假冒将军谎称中央领导女婿 诈骗超中航重机副总经理吴浩被“双规”拔除城市安全毒瘤大坡度今晚电视孩子高考在即 父母切莫慌神老 金“老烟枪”熄火与时代同行 透视《狼图腾》畅销全球十小菜农“三夏”现场会在海丰农场举行希望与中国影人合作拍片
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘