1.枚举类型:
一个变量只能有几种可能的值,这样的变量可以定义成枚举类型;
变量的值只能在列举出来的值的范围内,其他的值对该变量没有意义。
2.枚举类型的声明:
enum EWeekday //enumeration
{
EWeekday1, //注意这儿都是逗号
EWeekday2,
EWeekday3,
EWeekday4,
EWeekday5,
EWeekday6,
EWeekday7 //最后一个这儿没有符号
};
注意点①:
枚举元素按常量处理,所以称作枚举常量。他们不是变量,所以不要对他们进行赋值,即枚举元素的值是固定的。
注意点②:
枚举元素是常量,其值是一个整数,按照元素声明时候的顺序从0开始依次进行+1操作,默认的值就是:0,1,2,3,…。如下例:
#include"pch.h"
#include<iostream>
using namespace std;
enum EWeekday
{
EWeekday1, //默认其值为0
EWeekday2,
EWeekday3,
EWeekday4,
EWeekday5,
EWeekday6,
EWeekday7
};
int main()
{
int a = EWeekday1, b = EWeekday2, c = EWeekday3, d = EWeekday4, e = EWeekday5, f = EWeekday6, g = EWeekday7;
cout << "a=" << a << '\t' << "b=" << b << '\t' << "c=" << c << '\t' << "d=" << d << '\t' << "e=" << e << '\t' << "f=" << f << '\t' << "g=" << g << endl;
}
运行结果为:
注意点③:
枚举元素有默认的值,但也可以在声明的时候指定值。如下例:
#include"pch.h"
#include<iostream>
using namespace std;
enum EWeekday
{
EWeekday1=3,
EWeekday2=4,
EWeekday3=5, //**这里的赋初值最好是增大,避免出现重复**,以免后续编程出bug。
EWeekday4, //未赋初值,∴按照他的上一个元素的值+1的规则进行默认赋值,因此它的值为6。
EWeekday5,
EWeekday6,
EWeekday7
};
int main()
{
int a = EWeekday1, b = EWeekday2, c = EWeekday3, d = EWeekday4, e = EWeekday5, f = EWeekday6, g = EWeekday7;
cout << "a=" << a << '\t' << "b=" << b << '\t' << "c=" << c << '\t' << "d=" << d << '\t' << "e=" << e << '\t' << "f=" << f << '\t' << "g=" << g << endl;
}
运行结果为:
注意点④:
枚举值可以用来进行跟整数一样的判断、比较,switch-case 等操作
3.枚举类型和结构体类型结合:
#include"pch.h"
#include<iostream>
using namespace std;
enum ESex //定义枚举类型
{
ESex_Male,
ESex_Female
};
struct Student //定义Student这个结构体
{
string name;
int anum;
ESex sex;
int age;
};
int main()
{
Student stu;
stu.sex = ESex_Male; //枚举类型和结构体类型结合
cout << "stu.sex=" << stu.sex << endl;
}
运行结果为:
4.用 typedef 类型声明新的类型名字
使用 typedef 声明一个新的类型名字来代替已有的类型名。注意是新的类型名字,只是名字而已,不是一种全新的类型,只是改个名字而已。
#include"pch.h"
#include<iostream>
using namespace std;
struct Student
{
string name;
int anum;
char sex;
int age;
};
typedef unsigned int uint;
typedef int myint;
typedef Student Stu; //这仨就是用 typedef 类型声明新的类型名字
int main()
{
uint a = 2;
myint b = 3;
Stu Stu;
}