8.9.5 对象数组
对象数组和标准类型数组的使用方法并没有什么不同,也有声明、初始化和使用3个步骤。
1.对象数组的声明
对象数组的声明格式如下所示。
类名数组名[对象个数];
使用上述格式声明对象数组时,要求类定义中要么未显式定义任何构造函数(包括复制构造函数,这样,编译器将提供默认的默认构造函数),要么有且只能有1个参数都有默认值的构造函数(包括无参构造函数),数组所需要的内存空间才能被开辟。
2.对象数组的初始化
对象数组开辟后,其中的每个成员都是对象,可以调用对象的成员函数对对象数据成员进行访问,此外,还可在数组声明时对数组进行初始化,初始化常用无名对象完成。
Example类定义如下所示。
class Example { int x; int y; public: Example(int xp=0,int yp=0) { x=xp; y=yp; } };在数组声明的同时初始化对象数组,必须对每个元素初始化,如下所示。 Example sz[3]={Example(1,2),Example(),Example(7,8)};如果类中重载了多个构造函数,可以对不同的元素使用不同的构造函数。C++还允许只对对象数组的部分元素进行初始化,如下所示。 Example sz[12]={Example(1,2),Example(),Example(7,8)};
数组sz包含12个对象,上述语句在数组声明时只对前3个进行了初始化,后面9个对象将调用编译器提供的默认构造函数或用户显式定义的所有参数都有默认值的构造函数(包括无参构造函数)。和普通数组一样,如果编译器可以判断出数组的元素个数,数组的大小可省略。
还可使用某个具体对象为数组中的对象初始化,此时会调用对象的复制构造函数,如下所示。
Example ex1(1,5); Example ex2(4,6); Example sz[]={ex1,ex2,ex1};
注意
对象同样可以组织成多维数组,其用法和普通多维数组并没有区别。