数组、枚举和结构体都属于C++中的复合数据类型,这三种数据类型必须由基本的简单类型组成,枚举和结构使用频率也很高,理解起来不难,但真正使用起来要多复杂有多复杂,不过只要理清思路,合理规划和定义,那他们就随你拿捏了。
当我们需要为一些可以划分为一组的数据设置可以表示他们的变量,如一周的天数,从星期一到星期天,用字符串显然太占内存,也很麻烦,于是我们用整型作为他们的标志值
int Monday = 1;
int Tuesday = 2;
int Wednesday = 3;
int Thursday = 4;
int Friday = 5;
int Saturday = 6;
int Sunday = 7;
这样确实挺合适的,C++也确实是这样做的,但用的是枚举
#include
using namespace std;
void main()
{
enum Week //使用enum关键字,Day就是枚举类型,也是这一组数据的
{
Monday, //这就是枚举成员,现在第一个成员为Monday,它的值就是0
Tuesday, //之后的枚举值都默认加一
Wednesday, //每个枚举值用逗号分开
Thursday,
Friday,
Saturday,
Sunday //最后一个不用加逗号,现在Sunday的值就是6
};
//现在定义一个枚举变量,该变量需要初始化
Week myday = Week::Monday;
//myday现在就是枚举成员Monday,这可以说就是int类型,但用的时候还必须要强制转型下
cout << int(myday) << endl; //输出为0
myday = Week::Sunday; //可以再次赋值
cout << int(myday) << endl; //输出为6
}
当然我们也可以自己设置枚举成员的值
enum Week //使用enum关键字,Day就是枚举类型,也是这一组数据的
{
Monday = 100, //此时Monday就会是100,下面也会依次加一,即Tuesday=101,Wednesday=102
Tuesday, //101
Wednesday, //102
Thursday, //103
Friday = -10, //我们在这里又赋值了-10,从这里向后会依次加一,是的,可以赋值负数
Saturday, //-9
Sunday //-8
}; //大家可以试试自己将其中的输出出来检查
可以看出枚举中的成员本质上就是整型,但我们上面定义的myday是Week枚举类型,枚举与整型需要强制转换才可相等,使用枚举类型可以使数据更加便于管理和使用,而且可以让代码结构美观简洁。
#include
using namespace std;
void main()
{
struct Postion //定义了一个位置结构体
{
float x; //结构体中定义成员为位置的三维坐标
float y = 100; //可以为成员赋初值
float z; //初值默认为0
};
Postion postion;
postion.x = 11.35f; //给结构体中的成员赋值
postion.y = 15.87f;
postion.z = 19.21f;
cout << postion.x << "," << postion.y << "," << postion.z << endl;
}
当然结构体中也可以定义不同类型的成员
struct Student
{
int ID = 000000;
char name[20];
float height;
float weight;
Postion selfPostion; //其他结构体也可成为其成员
};
Student student1;
student1.selfPostion = postion; //将上面已设置好的位置变量赋值给其成员
//依然可以输出原来的位置值
cout << student1.selfPostion.x << "," << student1.selfPostion.y << "," << student1.selfPostion.z << endl;
结构体可以说是C++中最复杂的数据类型了,他基本上不挑食,来着不惧,数组、指针、结构体等,他可以变得异常庞大,结构体中不断嵌套结构体,要是图方便不做归类,只想用结构体来调用数据,那会让阅读者眼花缭乱、头昏脑涨,所以一般结构体只是定义小规模的数据和体量小的描述对象,大型的有C++中的类去完成。
typedef与using关键字都是与我们定义数据类型相关的,我们会在今后代码中频繁地见到他们,因为他们确实让代码的可读性变得更高,也让我们可以减少重复定义相同的且很长的数据类型变量。
#include
using namespace std;
int main()
{
//unsigned为无符号类型,其正整数范围比long大一倍,不过unsigned类型没有负数
typedef unsigned long TheLargeValue; //此时TheLargeValue就代表long关键字,算是long的别名
TheLargeValue allPopulation = 2312313232; //我们可以一眼看出这是个需要使用long或long以上定义的变量
cout << allPopulation << endl;
using mylong = unsigned long; //用这种方式也可以实现上面的效果,但using的重要用途是简化复杂类型的定义
using myDefine = %^**&&((&))*&qwsdad; //后面是一段很复杂地类型定义,使用using后就可以直接用myDefine定义了
}