C++之对象数组与对象指针

  • Post author:
  • Post category:其他




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



版权声明:本文为qq_42849332原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。