C++ 数组
2015-09-09 21:09
549 查看
假设有如下的student类型结构体
定义一个student类型的数组,数组中包含三个学生元素
第一种写法(构造函数为含参构造函数时):
不能写成如下形式:
因为在结构体定义中只有一个含有三个参数的构造函数,所以定义时必须给出三个参数,student s[3]会调用无参构造函数,但是结构体定义中没有无参构造函数,所以会出错。
后面的三条语句也有错,因为s[0]=new student(1,2,3)的语句是赋值语句,不会调用构造函数,但是要重载=运算符,才能进行赋值。
还有一个错误的地方,就是student s[3]已经调用构造函数构造了对象,后面各个元素就不用new了。
第二种写法(构造函数为无参构造函数时):
还有一个关于数组的不易理解的地方:
这里的ps是指针数组,不是对象数组,它的三个元素都是指针,每个指针都指向一个student类型的对象。如果只写student ps[3]而不写等号后面的部分则没有对象生成,也不会引发student构造函数的调用。括号里面new student(1,2,3)的返回类型是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 ,赋值给数组的第一个元素,也就是把新构造的对象的地址赋值给指针数组的第一个元素。
相关文章推荐
- 字节对齐C++
- 文件操作
- C语言去掉字符串前后空格,中间多余空格
- effective c++若不想使用编译器自动生成的函数,就应该明确拒绝
- C++内存管理
- 国家模式c++
- 编程基础——C/C++,Java,ObjC讨论回调模式
- 我的C++学习心得
- c++机试整理
- C++ string string string string string string string string string string
- 第二周 项目1-C/C++语言中函数参数传递的三种方式
- C++函数调用之thiscall
- 第2周项目1-C/C++语言中函数参数传递的三种方式
- 项目11.1分离各位数
- C++用法的学习心得
- 最简单C语言的扫雷地图(不是游戏)
- C++用法及学习心得
- Ubuntu Eclipse for C++ 11
- 【C++学习笔记】const的用法
- 深入学习C++中的函数概念