C++基础学习(四)枚举和结构体

数组、枚举和结构体都属于C++中的复合数据类型,这三种数据类型必须由基本的简单类型组成,枚举和结构使用频率也很高,理解起来不难,但真正使用起来要多复杂有多复杂,不过只要理清思路,合理规划和定义,那他们就随你拿捏了。

一、枚举

       当我们需要为一些可以划分为一组的数据设置可以表示他们的变量,如一周的天数,从星期一到星期天,用字符串显然太占内存,也很麻烦,于是我们用整型作为他们的标志值

	int Monday = 1;
	int Tuesday = 2;
	int Wednesday = 3;
	int Thursday = 4;
	int Friday = 5;
	int Saturday = 6;
	int Sunday = 7;

这样确实挺合适的,C++也确实是这样做的,但用的是枚举

#include<iostream>

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<iostream>

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

typedef与using关键字都是与我们定义数据类型相关的,我们会在今后代码中频繁地见到他们,因为他们确实让代码的可读性变得更高,也让我们可以减少重复定义相同的且很长的数据类型变量。

#include <iostream>

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定义了
}


猜你喜欢

转载自blog.csdn.net/qq_37873310/article/details/80528771