数组不仅可以由简单变量组成(例如整型数组的每一个元素都是整型变量),也可以由对象组成(对象数组的每一个元素都是同类的对象)。在日常生活中,有许多实体的属性是共同的,只是属性的具体内容不同。每一个数组元素是一个“类”的对象。
Student stu[50]; //定义了stud数组,有50个元素。
在建立数组时,同样要调用构造函数。如果有50个元素,就要调用50次。
在定义对象数组时,也可以提供实参实现初始化,如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供实参。如果构造函数有多个参数时,在花括号中分别写出构造函数并指定实参。
Student stud[3] = {60,70,78}; //3个实参分别传递给3个数组元素的构造函数。
Student stud[3] = { //定义对象数组
Student(1001,18,87), //调用第1个元素的构造函数,为它提供3个实参
Student(1002,19,76), //调用第2个元素的构造函数,为它提供3个实参
Student(1003,18,72), //调用第3个元素的构造函数,为它提供3个实参
}
下面的程序说明了对象数组的使用方法:
#include <string>
#include <iostream>
using namespace std;
class Student
{
public:
Student(int n, string nam, char s) //constructor
{
num = n;
name = nam;
sex = s;
cout << "Constructor called." << endl;
}
~Student() //destructor
{
cout << "Destructor called " << num << endl;
}
void display()
{
cout << "num: " << num << endl;
cout << "name: " << name << endl;
cout << "sex: " << sex << endl <<endl;
}
private: //private data members, unaccessable to public
int num;
string name;
char sex;
};
int main()
{
Student stud[3] = {
Student(1,"Peng,Yuyan",'m'),
Student(2,"Yi,Ni",'f'),
Student(3,"Chen,Shiyang",'m'),
};
stud[0].display();
stud[1].display();
stud[2].display();
return 0;
}
运行结果如下所示:
Constructor called.
Constructor called.
Constructor called.
num = 1
name = Peng,Yuyan
sex = m
num = 2
name = Yi,Ni
sex = f
num = 3
name = Chen,Shiyang
sex = m
Destructor called 3
Destructor called 2
Destructor called 1
1. 声明了对象数组,Student stud [3],并且初始化每个元素,并且显性调用了student这个构造函数。
2. 析构函数在同一个作用域,遵循“先构造的后析构,后构造的先析构”原则。