您的位置:首页 > 编程语言 > C语言/C++

C++ 数组

2015-09-09 21:09 549 查看
假设有如下的student类型结构体

[code]class student{
private:
    int a;
    int b;
    int c;
public:
    student(int s1,int s2,int s3):a(s1),b(s2),c(s3){}
};


定义一个student类型的数组,数组中包含三个学生元素

第一种写法(构造函数为含参构造函数时):

[code]student s[3]={student(1,2,3),student(4,5,6),student(7,8,9)};


不能写成如下形式:

[code]//错误的写法
student s[3]; 
s[0]=new student(1,2,3);
s[1]=new student(4,5,6);
s[2]=new student(7,8,9);


因为在结构体定义中只有一个含有三个参数的构造函数,所以定义时必须给出三个参数,student s[3]会调用无参构造函数,但是结构体定义中没有无参构造函数,所以会出错。

后面的三条语句也有错,因为s[0]=new student(1,2,3)的语句是赋值语句,不会调用构造函数,但是要重载=运算符,才能进行赋值。

还有一个错误的地方,就是student s[3]已经调用构造函数构造了对象,后面各个元素就不用new了。

第二种写法(构造函数为无参构造函数时):

[code]student *ps;
ps=new student[3];
delete []ps;//析构写法


还有一个关于数组的不易理解的地方:

[code]student * ps[3]={ new student(1,2,3), new student(4,5,6), new student(7,8,9)}


这里的ps是指针数组,不是对象数组,它的三个元素都是指针,每个指针都指向一个student类型的对象。如果只写student ps[3]而不写等号后面的部分则没有对象生成,也不会引发student构造函数的调用。括号里面new student(1,2,3)的返回类型是student ,赋值给数组的第一个元素,也就是把新构造的对象的地址赋值给指针数组的第一个元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: