构造函数能为虚函数吗?

soloist 2000-10-30 10:57:00
...全文
1630 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
comanche 2000-12-02
可虚!!!
这中标准早在ANSI C++ 92就引入(也可能更早,我是那时学的)
但……
virtual construct function跟正常的virtual function是有很大差别的但行为是相同的
1. 虚的构造函数要显式指明调用到哪一层基类,也就是说你可以不调用你的父类的构造函数而使用爷爷类的构造函数( 这一点我不知道有什么价值?)
2. 虚的构造函数就是函数,一般构造函数是过程,不知道这样讲对不对但就父类构造函数可跃过说来就说明只要是虚的构造函数就可以不调用,而且它构造的方向是反向的,这好像连系到一系列复杂问题,建议去看看Herbert的C++语言大全,里面有详细介绍
3. 还有一个有意思的事,CBuilder似乎违反了这一规定,它VCL所有的类都要有一个虚的构造函数??是不是因为VCL不是用C++写的??还是规定又有变化?
  • 打赏
  • 举报
回复
chinani 2000-12-02
可以。
  • 打赏
  • 举报
回复
Winsky 2000-12-01
当然可以是虚函数,Ansi标准的 C++ 也在不断升级和增加新内容,你的教材已经过时了。BCB对新标准的支持比VC要好得多。
  • 打赏
  • 举报
回复
NowCan 2000-11-25
过析构函数为虚函数是很常见的。
  • 打赏
  • 举报
回复
ab 2000-11-22
就算构造函数可以来虚的,用得着吗?
从这个类派生子类,子类的类名肯定和父类的不同,所以根本谈不上什么重载,那还虚它干嘛。
  • 打赏
  • 举报
回复
citycity 2000-11-22
我倒是看见过析构函数为虚函数的。
  • 打赏
  • 举报
回复
xubin_sh 2000-11-22
A virtual function is a member function that you expect to be redefined in derived classes. When you refer to a derived class object using a pointer or a reference to the base class, you can call a virtual function for that object and execute the derived class's version of the function.

1.构造函数在派生类中是不会被重定义的。
2.构造函数是不允许被显示调用的。
  • 打赏
  • 举报
回复
zyj_vc 2000-11-10
按照c++的标准语法,构造函数不能是虚函数,因为构造函数是不会通过指针调用的,虚函数没有意义
  • 打赏
  • 举报
回复
wanggenggz 2000-11-10
不行,因为构造函数是要在类初始化时实际调用的。
  • 打赏
  • 举报
回复
leer 2000-11-07
按理来说你一定要把构造函数声明成虚函数也应该可以,只是没有这个必要罢了。将没有
必要设为虚函数的函数设为虚函数,那简直就是浪费。
BCB我没用过,如真象你说的那样,那我对它也实在不敢恭维。
至于edyang的说法是没有倒理的,之所以会出现上述错误信息是编译器优化的结果。
因为构造函数通常比较小,因此编译器将其改为内联函数,这样速度要比函数的调用要快。
而内联函数是不可能是虚函数的。因此就出现了上述编译错误。
  • 打赏
  • 举报
回复
Edward 2000-11-05
不可能,问题是,按照虚函数的作用来讲,虚构造函数完全没有意义。当你声明一个类的时候,其类型就是确定的,只需调用一次构造函数即可。我用 VC 6 做了一下试验,如果你用 virtual 来修饰构造函数的话,编译器会发出错误信息:
'inline' is the only legal storage class for constructors
也就是说,用来修饰构造函数的关键字只能是 inline 或则没有。

把你的 BCB 生成的代码贴出来让大家看一看吧。
  • 打赏
  • 举报
回复
Edward 2000-10-31
不行,也没有任何意义。构造函数就是用来构造(或者初始化更确切一些)一个特定类的实例的。对象一经声明和定义,构造函数就被调用,而且只此一次;而 virtual 主要用来解决运行时根据不同的类来调用相应的类的成员函数。
  • 打赏
  • 举报
回复
SCUM 2000-10-31
是,没有必要玩虚的。

  • 打赏
  • 举报
回复
soloist 2000-10-31
可是,在Borland C++ Builder 5.0中,我自己做组件,从某个现成的组件继承,在BCB帮我
生成的代码中,我的组件构造函数就被声明为虚函数,
而我在某一本教科书上又清楚地看到构造函数不能为虚函数的说法,
我实在有点儿糊涂。
  • 打赏
  • 举报
回复
发帖
C语言
加入

6.6w+

社区成员

C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
申请成为版主
帖子事件
创建了帖子
2000-10-30 10:57
社区公告
暂无公告