护士节活动名称:一个指针与数组名的问题,请回答?

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/05 21:50:41
#include <iostream>
using namespace std;
class cat
{
public:
cat(){itsage=1;itsweight=5;}
~cat(){}
int getage(){return itsage;}
int getweight(){return itsweight;}
void setage(int age){itsage=age;}
private:
int itsage;
int itsweight;
};
int main()
{
cat *family=new cat[22];
int i;

for(i=0;i<22;i++)
{

family[i].setage(i*2+1);

}
for (i=0;i<22;i++)
{
cout<<"cat#"<<i+1<<"\t"<<": "<<family[i].getage()<<endl;

}
return 0;
}
首先这个程序没有错误.问题是1:cat[22]中的cat是数组名吗?
2:family是一个指针,可为什么到下边又出现了family[i]?
3:family[i].setage(i*2+1)又是怎么回事呢,指针不是应该用family[i]->setage(i*2+1)吗?

1.cat *family=new cat[22];的意思是创建一个指向cat类对象的指针和一个长度为22的数组,数组中的类型为cat类对象。family指向这个数组的第一个元素。
2.数组名也是一个指针常量,也可以当指针用。比方说int a[5],a既是数组名,也是指针常量,和这里不同的是family是一个指针变量,但是也是可以这样调用的。
3.指向对象的指针才可以用->,family是指向对象的指针,而family[i]是对象,所以只能用family[i].setage(i*2+1)调用。

数组名本身就是一个指针。这是一个C++程序,cat是类名。
family[i].setage(i*2+1)与family[i]->setage(i*2+1)表示的意思都是一样的,表示元素与数组之间的关系。好象是->表示关系比较紧密。