c++新增枚举类型

传统的枚举类型:  

枚举类型在C语言中经常使用到的。语法: enum 类型名 {枚举常量};

但是,C语言中的枚举类型存在一定的缺陷

#include 
#include 

// 定义枚举类型
typedef  enum  _NUMBER { ONE, TWO, THREE, FOUR, FIVE }NUB;

int main(void) {

	//  使用枚举类型进行定义变量
	NUB n = ONE;  // 定义枚举的量

	n = 2;   //  在C语言程序中可以直接将数字赋值给枚举变量

	n = 5;

	system("pause");

	return 0;
}

代码分析: 

1.  代码中我们定义了一个枚举的常量n,我们可以使用声明的枚举常量给它赋值,这样当然没有什么问题。

2.  但是,代码中我们除了1中的赋值方式,还可以直接使用数字对n进行赋值。 这就会出现问题。

3.  因为我们在枚举中定义的枚举常量其实本质就是数字,所以说给枚举定义的量赋值给数字是没有问题的。 

4.  那么问题出现在哪里? 

    其实很简单, 代码中ONE -> 0, TWO -> 1, THREE -> 2, FOUR -> 3, FIVE -> 4。你会发现我们定义的枚举常量范围是0-4

    如果我们使用常量的名称去赋值n自然不会出问题,因为名称只定义了那么几个。如果使用数字去赋值给n,就会出现问题了,使用数字赋值的时候,是没有限定的,我们很容易就赋值给超出枚举常量的范围之外的数字。

 如代码中,我们将5赋值给n不会出现问题,但是5已经超出了我们定义的范围。

之所以不出现问题,是因为枚举其实说白了就是整数,你将一个只能整数赋值给它编译器不会认为是错误的。 

 

为了防止上面的错误,c++提供了新的枚举类型,这种枚举类型将我们定义的常量与数字分割开了。 

 

c++新增的枚举类型 

其实就是定义成一个类了,语法:   enum class _NUM{ONE,TWO,THREE}; 

 c++新增枚举类型_第1张图片

代码分析:   

 1.   上面就使用了c++新增的枚举,我们前面说到了这个枚举并不与数字互通,也就是说我们不能直接将数字赋值给枚举定义的量,而且不能与数字进行比较。(也就是这种情况下,枚举常量和数字是不互通的) ,这就解决了之前的问题

 2.    要想使用新增的枚举常量需要在常量前面加上类的名称,例如,代码中想要使用ONE,就得是_NUMBER::ONE,无论是赋值还是使用都需要这样使用。

 3.   虽然枚举常量不与数字互通,但是我们可以对它进行类型强转。 例如: (int)_NUMBER::ONE其实就是0。代码中我们在数字比较的时候使用到了类型强制转换。

你可能感兴趣的:(c++,开发语言)