1.对象数组
是指每一个数组元素都是对象的数组,也就是说,若一个类有若干个对象,我们把一系列的对象用一个数组来存放。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。
格式: 类名 数组名[下标表达式]
在建立数组时,同样要调用构造函数。有几个数组元素就要调用几次构造函数。
(1)当只需要一个参数时,在定义对象数组时可以直接在等号后面的花括号内提供实参;当需要多个参数时,只能对一个构造函数的第一个参数赋值,其余的使用默认值。
#include<iostream>
using namespace std;
#include<Windows.h>
class exam
{
public:
exam(int n)//只有一个参数的构造函数
{
x = n;
}
int get_x()
{
return x;
}
private:
int x;
};
int main()
{
exam ob1[4] = { 11,22,33,44 };//用只有一个参数的构造函数给对象数组赋值
//如果构造函数的参数大于1,传入的参数对第一个参数赋值,其余的为默认值
for (int i = 0; i < 4; i++)
{
cout << ob1[i].get_x() << " ";
}
return 0;
}
(2)与基本数据类型的数组一样,在使用对象数组时只能访问单个数组元素
一般形式为:
数组名[下标].成员名
例如:
for(int i=0;i<4;i++)
cout<<ob1[i].get_x()<<' ';
运行结果:11 22 33 44
注意:当各个元素的初始值相同时,可以在类中定义不带参数的构造函数或带有默认参数值的构造函数;反之,需要定义带参数(无默认值)的构造函数
#include<iostream>
#include<Windows.h>
using namespace std;
class exam
{
public:
exam()//不带参数的构造函数
{
x = 123;
}
exam(int n)//带1个参数的构造函数
{
x = n;
}
int get_x()
{
return x;
}
private:
int x;
};
int main()
{
exam ob1[4] = { 11,22,33,44 };//调用4次带1个参数的构造函数
exam ob2[4] = { 55,66 };//调用2次带1个参数的构造函数,2次不带参数的构造函数
for (int i = 0; i < 4; i++)
cout << ob1[i].get_x() << ' ';
cout << endl;
for (int i = 0; i < 4; i++)
cout << ob2[i].get_x() << ' ';
system("pause");
return 0;
}
运行结果为:
11 22 33 44
55 66 123 123
编译系统只为对象数组元素的构造函数传递1个实参,所以在定义数组时提供的实参个数不能超过数组元素个数。
如果构造函数有多个参数,在定义对象数组时应当怎么实现初始化?我们只需在括号中分别写出构造函数并指定实参即可。例如类Complex的构造函数有两个参数,分别代表实部和虚部,则可以这样定义对象数组:
Complex com[3] = {
Complex(1.1,2.2),
Complex(3.3,4.4),
Complex(5.5,6.6)
};
2.对象指针
对象指针就是用于存放对象地址的变量,一般形式为:
类名*对象指针名
1.
用指针访问单个对象成员
:说明对象指针的语法和说明其他数据类型指针的语法相同。使用对象指针时,首先要把它指向一个已创建的对象,然后才能引用该对象的成员。在一般情况下,用点运算符“.”来访问对象成员,当用指向对象的指针来访问对象成员时,就要用“->”操作符。
#include<iostream>
#include<Windows.h>
using namespace std;
class exe
{
public:
void set_a(int a)
{
x = a;
}
void show_a()
{
cout << x << endl;
}
private:
int x;
};
int main()
{
exe ob;
exe *p;
ob.set_a(2);
ob.show_a();
p = &ob;
p->show_a();
(*p).show_a();
system("pause");
return 0;
}
//运行结果:
2
2
2
2.
用对象指针访问对象数组
:
将上述main函数里边替换为:
exe ob[2];
exe *p;
ob[0].set_a(10);
ob[1].set_a(20);
p = ob;
p->show_a();
p++;
p->show_a();
//运行结果:
10
20