对象数组:
定义、使用对象数组与普通对象方法相似,定义时,系统自动为对象数组的成员分配内存空间,并且自动调用构造函数初始化成员对象,生命周期结束后调用析构函数
格式:
//定义
类名 对象数组名[成员个数]={ {析构函数初始化数据} ,{...} ,{...} };
//有权访问成员
对象数组名[成员序数] . 成员;
//有权访问函数
对象数组名[成员序数] . 成员函数(参数列表);
数组中的每个对象都自动调用构造函数和析构函数。
数组内按照序号顺序调用构造函数,析构函数调用顺序序号顺序相反,先构造的后析构
class z
{
private:
int a; int b; int c;
public:
z(int e = 0, int f = 1, int g = 1) :a(e), b(f), c(g)
{
cout <<a<< ":调用构造" << endl;
}
~z()
{
cout << a<< " :调用析构" << endl;
}
};
int main()
{
z a[4] = { {},{1},{2,3},{4,5,6} };
return 0;
}
输出:
对象指针:
对象指针在使用之前必须先进行初始化。可以让它指向一个已定义的对象,也可以用new运算符动态建立堆对象。
格式:
//定义
类名 *对象名=&已定义的对象;
类名 *对象名=new 类名{初始化数据};
//访问
对象指针名->成员;
对象指针名->成员函数(实参列表);
引例:
class z
{
private:
int a; int b; int c;
public:
z(int e = 0, int f = 1, int g = 1) :a(e), b(f), c(g)
{}
void show()
{
cout << a << " " << b << " " << c << endl;
}
};
int main()
{
z a(1,2,3);
z* b = &a;
b->show();
z* c = new z(4, 5, 6);
c->show();
delete c;
}