缺省构造函数

来源:互联网 发布:手机声音放大器软件 编辑:程序博客网 时间:2024/05/17 23:01

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

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


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

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

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


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

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

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


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

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

0 0
原创粉丝点击