Rating: B
Label: Blimpo
Rating: 4
Color: red
Label: Buffalo Keys
Rating: 5
Style: Mercator
Label: Blimpo
Rating: 4
Color: red
Label: Buffalo Keys
Rating: 5
Style: Mercator
13.8
类设计回顾
C++可用于解决各种类型的编程问题,但不能将类设计简化成带编号的例程。不过,有一些常用的指
导原则,经常复习介绍过的内容,将会对您有所帮助的。
13.8.1 编译器生成的成员函数
第12章介绍过,编译器会自动生成一些公有成员函数。这表明这些成员函数特别重要,下面回顾一下
其中的 ·些函数。
1. 默认构造函数
默认构造函数要么没有参数,要么所有的参数都有默认值。如果没有定义任何构造函数,编译器将定
文默认构造函数,让您能够创建对象。例如,假设Star是一个类,则下述代码需要使用默认构造函数:
Star rigel:
Star pleiades[6]: // create an array of objects
自动生成的默认构造函数的另一项功能是,调用基类的默认构造函数以及调用本身是对象的成员所属
类的默认构造函数。
另外,如果派生类构造函数的成员初始化列表中没有显式地调用基类构造函数,则编译器将使用基类
的默认构造函数来构造派生类对象的基类部分。在这种情况下,如果基类没有构造函数,将导致编译阶段
错误。
如果定义了某种构造函数,编译器将不会定义默认构造函数。在这种情况下,如果需要默认构造函数,
则必须自己提供。
提供构造函数的动机之-是确保对象总能被正确地初始化。另外,如果类包含指针成员,则必须初始
化这些成员。因此,最好提供…个显式默认构造函数,将所有的类数据成员都初始化为合理的值。
2. 复制构造函数
复制构造函数接受其所属类的对象作为参数。例如,Star类的复制构造函数的原型如下:
Star (const Star &) :
在下述情况下,将使用复制构造函数:
● 将新的对象初始化为一个同类对象。
· 按值将对象传递给函数。
● 函数按值返回对象。
● 编译器生成临时对象。
// create an object without explicit initialization