C++ 数组

假设有如下的student类型结构体

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

定义一个student类型的数组,数组中包含三个学生元素
第一种写法(构造函数为含参构造函数时):

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

不能写成如下形式:

//错误的写法
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了。
第二种写法(构造函数为无参构造函数时):

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

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

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 ,赋值给数组的第一个元素,也就是把新构造的对象的地址赋值给指针数组的第一个元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值