C++语法03-对象数组与对象指针

1. 对象数组

所谓对象数组是指每一个数组元素都是对象的数组,也就是说,若一个类有若干个对象,我们把这一系列的对象用一个数组来存放。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。

定义一个一维数组的格式如下:

类名 数组名[下标表达式]

例如有10个复数,每个复数的属性包括实部与虚部。如果为每一个复数建立一个对象,需要分别取10个对象名。显然用程序处理起来很不方便。这时可以定义一个复数类Complex的对象数组,每一个数组元素是Complex类的一个对象,例如:

1
Complex com[10];				//定义类Complex的对象数组com,含有10个对象数组元素

在建立数组时,同样要调用构造函数。有几个数组元素就要调用几次构造函数。例如有10个数组元素 ,就要调用10次构造函数。类Complex的构造函数有两个参数,分别用于给实部数据和虚部数据赋值。如果构造函数只有1个参数,在定义对象数组时可以直接在等号后面的花括号内提供实参。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//用只有1个参数的构造函数给对象数组赋值
#include<iostream>
using namespace std;
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;
}

与基本数据类型的数组一样,在使用对象数组时也只能访问单个数组元素,其一般形式是:

数组名 [下标].成员名

以上例子中构造函数只有一个参数,如果构造函数有多个参数,在定义对象数组时应当怎样实现初始化?我们只要在花括号中分别写出构造函数并指定实参即可。例如:

1
2
3
4
5
Complex com[3]={        //定义对象数组com
Complex(1.1, 2.2);
Complex(3.3, 4.4);
Complex(5.5, 6.6)
};

由于这个对象数组有3个对象数组元素,因此在建立对象数组时,3次调用构造函数,对每一个对象数组元素初始化。当1个数组中的数组元素被删除时,系统会调用析构函数来完成扫尾工作,有几个对象数组元素就会调用几次析构函数。

2. 对象指针

每一个对象在初始化后都会在内存占有一定的空间。因此,既可以通过对象名访问一个对象,也可以通过对象地址来访问一个对象。对象指针就是用于存放对象地址的变量。

声明对象指针的一般语法形式为:

类名 *对象指针名

(1)用指针访问单个对象成员

​ 说明对象指针的语法和说明其他数据类型指针的语法相同。使用对象指针时,首先要把它指向一个已创建的对象,然后才能引用该对象的成员。

​ 在一般情况下,用点运算符“.”来访问对象成员,当用指向对象的指针来访问对象成员时,就要用“->”操作符。

(2)用对象指针访问对象数组

​ 对象指针不仅能引用单个对象,也能访问对象数组。

1
2
3
4
5
6
7
8
9
10
11
12
int main(){
exe ob[2]; //定义类exe的对象数组ob[2]
exe *p; //定义指向类exe的对象指针变量p
ob[0].set_a(10); //
ob[0].set_b(20);
p=ob;
p->show_a();
p++; //一般而言,当指针加1或减1时,它总是指向其基本类型中相邻的一个元素,对象指针也是如此
p->show_a();

return 0;
}

3. this指针

// TODO

-------------The End-------------
0%