用户通常都需要创建同一个类的多个对象,可以创建独立的对象变量,但也可以创建对象数组。其实前面已经学过结构数组了,对象数组这部分内容很容易就能掌握了。
声明对象数组
声明对象数组的方法和声明标准类型数组相同:
Stock arr[10]; // 创建10个Stock对象的数组
上述代码没有显式初始化,所有对象都将调用默认构造函数。除此之外,还可以用构造函数来初始化数组元素。
Stock arr[5] = {
Stock(), // 手动调用默认构造函数
Stock("Stock1", 3, 2.5),
Stock(arr[1])
// 其余元素将自动调用默认构造函数
};
疑问
初始化对象数组的方案是:首先使用默认构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,然后将临时对象的内容复制到对应的元素中。因此,要创建类对象数组,则这个类必须有默认构造函数 —— 《C++ Primer Plus》。
但是我运行上述代码时,并没有先用默认构造函数创建数组,再创建临时对象复制给对应元素,而是直接用构造函数创建数组元素。打印的输出如下所示:
This is Default Constructor Function.(默认构造函数)
Default Constructor Function END.
This is a Constructor Function —— Stock(const std::string, long, double)
Constructor Function END.
This is Copy Constructor Function.(复制构造函数)
Copy Constructor Function END.
This is Default Constructor Function.(默认构造函数)
Default Constructor Function END.
This is Default Constructor Function.(默认构造函数)
Default Constructor Function END.
Destructor Function. Company is No Company
Destructor Function. Company is No Company
Destructor Function. Company is Stock1
Destructor Function. Company is Stock1
Destructor Function. Company is No Company