C++ 对象数组

**数组元素不仅可以是基本数据类型,也可以是自定义类型。**例如,要存储和处理某单位全体雇员的信息,就可以建立一个雇员类的对象数组。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。 因此,和基本类型数组相比,对象数组有一些特殊之处。

(1)声明一个一维对象数组的语句形式为:

类名 数组名[常量表达式];

(2)与基本类型数组一样,在使用对象数组时也只能引用单个数组元素。每个数组元素都是一个对象,通过这个对象,便可以访问到它的公有成员,一般形式是:

数组名[下标表达式].成员名

(3)**对象数组的初始化过程,实际上就是调用构造函数对每一个元素对象进行初始化的过程。**如果在声明数组时给每一个数组元素指定初值,在数组初始化过程中就会调用与形参类型相匹配的构造函数,例如:

A a[2]={A(1,2),A(3,4)};

在执行时会先后两次调用带形参的构造函数分别初始化a[0]和a[1]。如果没有指定数组元素的初始值,就会调用默认的构造函数,例如:

A a[2]={A(1,2)};

在执行时首先调用带形参的构造函数初始化a[0],然后调用默认构造函数初始化a[1]。

【注意】
如果需要建立某个类的对象数组,在设计类的构造函数时,就要充分考虑到数组元素初始化的需要:当各元素对象的初值要求为相同的值时,应该在类中定义默认构造函数;当各个元素对象的初值要求为不同的值时,需要定义带形参(无默认值)的构造函数。

当一个数组中的元素对象被删除时,系统会自动调用析构函数来完成扫尾工作。

【例1】对象数组应用举例
Point.h文件:

#pragma once
#ifndef _POINT_H
#define _POINT_H

class Point
{
public:
	Point();
	Point(int x, int y);
	~Point();
	void move(int newX, int newY);
	int getX() { return x; }
	int getY() { return y; }
	static void ShowCount();
private:
	int x, y;
};

#endif // !_POINT_H

Point.cpp文件:

#include
#include"Point.h"
using namespace std;

Point::Point()
{
	x = y = 0;
	cout << "调用默认构造函数" << endl;
}
Point::Point(int x, int y):x(x),y(y)
{
	cout << "调用构造函数" << endl;
}
Point::~Point()
{
	cout << "调用析构函数" << endl;
}
void Point::move(int newX, int newY)
{
	cout << "把点移动到:("<<newX<<","<<newY<<")" << endl;
	x = newX;
	y = newY;
}

Main.cpp文件:

#include
#include"Point.h"
using namespace std;

int main()
{
	cout << "进入主函数" << endl;
	Point a[2];
	for (int i = 0; i < 2; i++)
	{
		a[i].move(i + 10, i + 20);
	}
	cout << "退出主函数" << endl;
	return 0;
}

运行结果:
C++ 对象数组_第1张图片

你可能感兴趣的:(C++,c++,开发语言)