一:对象数组
类也是自定义的一种数据类型,当需要在一个类下创建多个对象时,可以采用对象数组的方法,具体格式: 类名 对象名[常数]。
下面是是一段测试程序,并通过构造函数把对象数组均初始化。
#include<iostream>
using namespace std;
class zuobiao
{
private:
int x;
int y;
public:
void show_xy()
{
cout<<"坐标为:"<<"("<<x<<","<<y<<")"<<endl;
}
zuobiao(int a=5,int b=5);
};
zuobiao::zuobiao(int a,int b)
{
x=a;
y=b;
cout<<"构造函数被调用"<<endl;
}
int main()
{
zuobiao p[5];
for(int i=0;i<5;i++)
{
p[i].show_xy();
}
return 0;
}
从图中可以看出,在定义对象数组的时候自动调用构造函数进行初始化,而且按照上面的显示,共调用了5次,说明对象数组构造了5次。
二:对象指针
对象指针和普通指针一样,即可以指向单个对象成员(这里要用取地址符),也可指向对象数组(这里不用取地址符,原因和普通型变量是一样的:数组名称本身就是一个指针。)
通过指针调用成员函数时格式为: 指针名->函数名
下面是测试程序。
#include<iostream>
using namespace std;
class zuobiao
{
private:
int x;
int y;
public:
void show_xy()
{
cout<<"坐标为:"<<"("<<x<<","<<y<<")"<<endl;
}
void set_xy(int a,int b)
{x=a;y=b;
cout<<"坐标设置已调用"<<endl;
}
};
int main()
{
zuobiao p[5];
zuobiao *px=p;
for(int i=0;i<5;i++)
{
p[i].set_xy(i,i+1);
px->show_xy();
px++;
}
return 0;
}
思路就是把对象看做是一种数据类型(事实也如此),和普通数据类型的数组和指针的概念联系起来,访问和调用方法是基本一样的。
//-----------
-this指针-------------
this指针时和对象有关的一种特殊指针,成员函数通过这个指针可以知道自己属于哪一个对象,也就是说每一个成员函数都有一个this指针,this指针指向改函数所属的类的对象。因此,成员函数访问数据成员的格式可以写为: this->数据成员。
对于调用某个对象的成员函数(这一类的函数都长的一样),便是通过把成员函数的指针指向当前对象来访问到当前对象的数据成员,但是一般写程序的时候都默认不写出这个指针,默认和写出是相同的。
比如:上面的设置坐标的函数也可以写为:
void set_xy(int a,int b)
{this->x=a;
this->y=b;
cout<<"坐标设置已调用"<<endl;
}
效果都是相同的。