为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我们在C ++中没有虚拟构造函数?

为什么我们在C ++中没有虚拟构造函数?

C++
LEATH 2019-10-23 14:27:35
为什么C ++没有虚拟构造函数?
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

从马的嘴里听到。:)


来自Bjarne Stroustrup的C ++样式和技术常见问题解答为什么我们没有虚拟构造函数?


虚拟调用是一种在给出部分信息的情况下完成工作的机制。特别是,“虚拟”使我们可以调用仅知道任何接口而不知道对象确切类型的函数。要创建对象,您需要完整的信息。特别是,您需要知道要创建的确切类型。因此,“对构造函数的调用”不能是虚拟的。


FAQ条目继续为代码提供了一种无需虚拟构造函数即可实现此目的的方法。


查看完整回答
反对 回复 2019-10-23
?
慕慕森

TA贡献1856条经验 获得超17个赞

虚函数基本上提供多态行为。即,当您使用动态类型不同于所引用的静态(编译时)类型的对象时,它提供的行为适合于对象的实际类型,而不是对象的静态类型。


现在尝试将这种行为应用于构造函数。构造对象时,静态类型始终与实际对象类型相同,因为:


要构造一个对象,构造函数需要创建对象的确切类型。此外,您不能有指向构造函数的指针。


(Bjarne Stroustup(P424 C ++编程语言SE))


查看完整回答
反对 回复 2019-10-23
?
白板的微信

TA贡献1883条经验 获得超3个赞

与诸如Smalltalk或Python之类的面向对象的语言不同,构造函数是表示类的对象的虚拟方法(这意味着您不需要GoF 抽象工厂模式,因为您可以传递表示类的对象,而无需制作C ++是一种基于类的语言,并且没有表示该语言任何构造的对象。该类在运行时不作为对象存在,因此您不能在其上调用虚拟方法。


尽管我见过的每个大型C ++项目最终都实现了某种形式的抽象工厂或反射,但这符合“不用为不使用而付出的钱”的理念。


查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 590 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信