1.对象数组的定义和使用
- 可以简单的理解类就是我们自定义的数据类型, 而对象就是类的实例, 因此我们也可以构造对象数组和对象的指针。
- 将具有相同类类型的对象有序地集合在一起便构成了对象数组, 以一维对象数组为例, 其定义形式为:
类名 对象数组名[常量表达式];
- 一维对象数组有时也称为对象向量, 它的每个元素都是相同类类型的对象。
eg:例如表示平面上若干个点, 可以这样定义:
Point points[100];//表示100个点
- 关于对象数组的说明:
(1) 在建立对象数组时, 需要调用构造函数。 如果对象数组有100个元素, 就需要调用100次构造函数。
(2)如果对象数组所属类有带参数的构造函数时, 可用初始化列表按顺序调用构造函数, 使用复制初始化来初始化每个数组元素。
(3)如果对象数组所属类有单个参数的构造函数时, 定义数组时可以直接在初值列表中提供实参。
(4)对象数组创建时若没有初始化, 则其所属类要么有合成默认构造函数(此时无其他的构造函数),要么定义无参数的构造函数或全部参数为默认参数的构造函数(此时编译器不再合成默认构造函数) 。[若无定义构造函数,编译器会自己生成合成默认构造函数]
(5)对象数组的初始化式究竟是什么形式, 本质上取决于所属类的构造函数。 因此, 需要明晰初始化实参与构造函数形参的对应关系, 避免出现歧义性。
(6)如果对象数组所属类含有析构函数, 那么每当建立对象数组时:
按每个元素的排列顺序调用构造函数; 每当撤销数组时, 按相反的顺序调用析构函数。
Point P[3]={Point(1,2),Point(5,6),Point(7,8)};//三个实参
Student S[5]={20,21,19,20,15};//Student类中只有一个数据成员
2.指向对象的指针
- 在建立对象时, 编译器会为每一个对象分配一定的存储空间, 以存放其成员。
对象内存单元的起始地址就是对象的指针。
可以定义一个指针变量, 用来存放对象的指针。 指向类对象的指针变量的定义形式为 :
类名 *对象指针变量名=初值;//初值指的是:相同类型的类的地址
class Time
{
public:
Time(int h=0, int m=0, int s=0):hour(h), minute(m), second(s){}
void set(int h=0, int m, int s=0)
{
hour=h;
minute=m;
second=s;
}
};
Time now(12,0,0),*pt;//指向对象的指针变量
pt=&now;
pt->set(13,13,0);
pt->hour=1;