缺省构造函数

《c++编程思想》阅读笔记(6)

第4章:初始化与清除,内容太多,故分为几篇博客来进行归纳:)


缺省构造函数就是不带任何参数的构造函数。当编译器需要创建一个对象而又不知任何细节时,缺省的构造函数就显得非常重要。比如,我们有一个类Y,并用它来定义对象:

Y y4[2] = {Y(1)};

编译器就会报告找不到缺省的构造函数,数组中的第二个对象想不带参数来创建,所以编译器就去找缺省的构造函数。实际上,如果我们只是简单地定义了一个个Y对象的数组:
Y y5[7];
或一个单一的对象:
Y y;
编译器会报告同样的错误,因为它必须用一个缺省的构造函数去初始化数组中的每个对象。


缺省构造函数是如此重要,所以在一个构造类型(struct或class)中没有构造函数时,编译器就会自动创建一个。如下面的例子会正常运行:

class Z {
  int i;  // private
};  // no constructor
Z z, z2[10];

然而,一旦有构造函数而没有缺省构造函数,上面的对象定义就会产生一个编译错误


对于一个c++的新手来说,自动产生的缺省构造函数并不会使编程变得容易。它实际上要求与已有的c代码保持向后兼容。在c中,创建一个struct数组的情况很常见,而在c++中,在没有缺省构造函数时,这会引起一个编译错误。
如果我们仅仅因为风格问题就去修改我们的c代码,然后用c++重新编译,也许我们会很不乐意。当将c代码在c++中编译时,我们总会遇到这样和那样的编译错误,但这些编译错误都是c++编译器所发现的c的不良代码。因为c++的规则更严格。事实上,用c++编译器去编译c代码是一个发现潜在的错误的很好的方法。

(这篇有点短,因为只剩这个内容了,有关该章的其他内容可以参考我的前两篇博客:))

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值