发布日期:2015-12-29 11:15 来源: 标签: 编程语言 C++教程 C++对象数组 C++初始化对象数组
本章我们主要学习C++中如何定义对象数组?如何对对象数组进行初始化?下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。
1.对象数组:在ANSI C中,把具有相同结构类型的结构变量,有序地集合起来便组成了结构数组.在ANSI C++中,与此类似将具有相同class类型的对象有序地集合在一起便组成了对象数组,对于一维对象数组也称为"对象向量",因此对象数组的每个元素都是同种class类型的对象.
 (1)对象数组的定义:其定义格式为:
对象数组名[元素个数]...[ = {初始化列表}];
其中是对象数组元素的存储类型,与变量一样有extern型,static型和auto型等,该对象数组元素由指明所属类,与普通数组类似,方括号内给出某一维的元素个数.对象向量只有一个方括号,二维对象数组有两个方括号,如此类推.
#include 
class Point {
int x, y;
public :
Point(void) { x = y = 0; }
Point(int xi, int yi) 
{ x = xi; y = yi; }
Point(int c) { x = y = c; }
void Print( ) 
{ static int i = 0 ; 
cout << "P" << i++ << "(" << x
<< " , " << y << ")\n";
}
}; 
void main( )
{ Point Triangle[3] = {Point(0, 0), 
Point(5, 5), Point(10, 0)};
int k = 0;
cout << "输出显示第" << ++k 
<< "个三角形的三顶点 : \n";
for(int i = 0; i < 3; i++)
Triangle[i].Print( );
Triangle[0] = Point(1);
Triangle[1] = 6; //Call Point(6)
Triangle[2] = Point(11, 1);
cout << "输出显示第" << ++k 
<< "个三角形的三顶点 : \n";
for(i = 0; i < 3; i++)
Triangle[i].Print( );
Point Rectangle[2][2] = {Point(0, 0)
,Point(0,6),Point(16,6) , 
Point(16,0)};
cout << "输出显示一个矩形的四顶点 : \n";
for(i = 0; i < 2 ; i++)
for(int j = 0; j< 2; j++)
Rectangle[i][j].Print( );
cout<<"输出显示45度直线上的三点 : \n";
Point Line45[3] = {0, 1, 2};
for(i = 0; i < 3; i++)
Line45[i].Print( );
Point PtArray[3];
cout << "输出显示对象向量PtArray的三元素 : \n";
for(i = 0; i < 3; i++)
PtArray[i].Print( );

该程序的输出结果:
输出显示第1个三角形的三顶点 :
P0(0 , 0)
P1(5 , 5)
P2(10 , 0)
输出显示第2个三角形的三顶点 :
P3(1 , 1)
P4(6 , 6)
P5(11 , 1)
输出显示一个矩形的四顶点 :
P6(0 , 0)
P7(0 , 6)
P8(16 , 6)
P9(16 , 0)
输出显示45度直线上的三点 :
P10(0 , 0)
P11(1 , 1)
P12(2 , 2)
输出显示对象向量PtArray的三元素 :
P13(0 , 0)
P14(0 , 0)
P15(0 , 0) 
(2)对象数组的初始化
①当对象数组所属类含有带参数的构造函数时,可用初始化列表按顺序调用构造函数初始化对象数组的每个元素.如上例中:
Point Triangle[3] = {Point(0, 0),
Point(5, 5),Point(10, 0)};
Point Rectangle[2][2] = {Point(0, 0), 
Point(0, 6),Point(16,6),Point(16,0)};
也可以先定义后给每个元素赋值,其赋值格式为:
对象数组名[行下标] [列下标] = 构造函数名(实参表);
例如:
Rectangle[0][0] = Point(0, 0); 
Rectangle[0][1] = Point(0, 6);
Rectangle[1][0] = Point(16, 6);
Rectangle[1][1] = Point(16, 0);
若对象数组所属类含有单个参数的构造函数时;
②如上例中"Point(int c);",该构造函数置x和y为相同的值.那么对象数组的初始化可简写为:
Point Line45[3] = {0, 1, 2};
Point Triangle[3] = {0,//Call Point(0)
5,//Call Point(5)
Point(10, 0)};
③对象数组创建时若没有初始化列表,其所属类中必须定义无参数的构造函数,在创建对象数组的每个元素时自动调用它.如上例中在执行 "Point PtArray[3];"语句时,调用Point(void),初始化对象数组PtArray[ ]的每个对象为(0,0).
④如果对象数组所属类含有析构函数,那末每当建立对象数组时,按每个元素的排列顺序调用构造函数,每当撤消数组时,按相反的顺序调用析构函数.
#include 
#include 
class Personal {
char name[20];
public :
Personal(char * n)
{ strcpy(name , n);
cout << name << " says hello !\n"; 
}
~Personal(void)
{ cout << name << " says goodbye !\n"; }
};
void main( )
{ cout << "创建对象数组,调用构造函数 :\n";
Personal people[3] = {"Wang", "Li", "Zhang"}; 
cout << "撤消对象数组,调用析构函数 :\n";

该程序的输出结果为:
创建对象数组,调用构造函数 :
Wang says hello !
Li says hello !
Zhang says hello !
撤消对象数组,调用析构函数 :
Zhang says goodbye !
Li says goodbye !
Wang says goodbye !

相关评论

专题信息
    C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性! 本教程从基础讲解了C++语言,希望对大家有所帮助,望多多支持中国站长网络学院。