CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

为什么构造函数不能是虚函数?

楼主zjbirdman()2006-09-01 08:34:02 在 C/C++ / C++ 语言 提问

rt 问题点数:20、回复次数:12Top

1 楼benh(滴答)回复于 2006-09-01 08:56:41 得分 20

构造函数是在对象完全构造之前运行的,在构造函数运行的时候,对象的动态类型还不完整。Top

2 楼believefym(feng)回复于 2006-09-01 09:00:30 得分 0

虚函数主要是为了实现多态  
  构造函数如果是虚函数有必要吗?Top

3 楼Stephen_Ma(极品飞马)回复于 2006-09-01 16:58:57 得分 0

构造的时候创建虚函数表,如果构造函数也是虚函数的话,程序就不知道怎样创建了。Top

4 楼sinall()回复于 2006-09-01 17:04:59 得分 0

反证法:  
  构造函数可以是虚函数,请问你打算怎么调用?Top

5 楼sinall()回复于 2006-09-01 17:20:57 得分 0

嗯,想了下,子类覆盖父类构造函数,并在初始化列表中调用之,倒是一种应用。  
  不过,这样是不是就破坏了类的封装性。Top

6 楼liu584(好好学习C++)回复于 2006-09-02 11:45:33 得分 0

大师们解释了一箩筐了  
  随便找点书看就是了Top

7 楼zhaowanru19(***婉如***)回复于 2006-09-02 12:35:00 得分 0

我怎么记得构造函数可以是虚函数但是析构函数就不可以了!Top

8 楼060(060)回复于 2006-09-02 14:08:08 得分 0

TO    
  zhaowanru19()    
   
  你说反了。析构函数可以为虚函数。MFC中有许多这样的类。Top

9 楼rubbish_only(原谅我的丑)回复于 2006-09-02 14:22:16 得分 0

首先楼主要明白虚函数。在运行期才能识别应该调用是基类的或是子类的虚函数,而调用的依据就是看到底是基类的对象还是子类的对象(或指针),但是构造函数不行,因为在构造函数调用之前对象还不存在,所以应该由谁来调用这个“虚构造函数呢”?Top

10 楼SuperXu_swjtu(SuperXu)回复于 2006-09-02 14:24:00 得分 0

因为如果构造函数为虚函数的话,它将在执行期间被构造,而执行期则需要对象已经建立,构造函数所完成的工作就是为了建立合适的对象,因此在没有构建好的对象上不可能执行多态(虚函数的目的就在于实现多态性)的工作。  
          在继承体系中,构造的顺序就是从基类到派生类,其目的就在于确保对象能够成功地构建。楼上也说了,构造函数同时承担着虚函数表的建立,如果它本身都是虚函数的话,如何确保vtbl的构建成功呢?Top

11 楼OOPhaisky(异化$渴望成功~~)回复于 2006-09-02 15:43:43 得分 0

老生常谈了,本想找到一个帖子,但是没找到:(Top

12 楼sinkileu(小心)回复于 2006-09-02 15:54:52 得分 0

同意benh(滴答)、Stephen_Ma(极品飞马)   、rubbish_only(原谅我的丑)、SuperXu_swjtu(SuperXu)Top

相关问题

关键词

得分解答快速导航

  • 帖主:zjbirdman
  • benh

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo