C++新特性探究(十一):enum class(struct)

在这里插入图片描述
相关博文:C/C++枚举探究

从C++到C++11

  枚举体的声明和定义使用enum class或是enum struct,二者是等价的。使用enum class\enum struct不会与现存的enum关键词冲突。而且enum class/enum struct具有更好的类型安全和类似封装的特性(scoped nature)。

在这里插入图片描述
例1
在这里插入图片描述
附例1代码:

//小问学编程
#include<iostream>
#include<fstream>
using namespace std;

enum class Seaon
{
    
    
	Spring,Summer,Autumn,Winter
};
enum struct XX
{
    
    
	Spring,Summer,Autumn,Winter
};

int main()
{
    
    
	Seaon s=Seaon::Spring;
		XX x=XX::Spring;

    cout<<(int)Seaon::Spring<<endl;//C语言的强制转换
    cout<<static_cast<int>(Seaon::Autumn)<<endl;//C++的强制转换
}

作用域

例2:类内的枚举
在这里插入图片描述
附例2代码:

//小问学编程
#include<iostream>

using namespace std;

class Painter
{
    
    
public:
	enum Color{
    
    red,green,yellow};
public:
	Painter()
	{
    
    
	}
	void dis(Color c)
	{
    
    
		cout<<c<<endl;
	}
};

int main()
{
    
    
	Painter p;
	p.dis(Painter::green);
	return 0;
}

带作用域的枚举

例3:
在这里插入图片描述
附例3代码:

//小问学编程
#include<iostream>
using namespace std;

enum class Color{
    
    red,green,yellow};

class Painter
{
    
    
public:
	Painter()
	{
    
    
	}
	void dis(Color c)
	{
    
    
		cout<<static_cast<int>(c)<<endl;
	}
};

int main()
{
    
    
	Painter p;
	p.dis(Color::green);
	return 0;
}

指定类型

  默认的底层数据类型是int,用户可以通过:type(冒号+类型)来指定任何整型(除了wchar_t)作为底层数据类型。

例4在这里插入图片描述
附例4代码:

//小问学编程
#include<iostream>
using namespace std;

enum class color:int{
    
    red,green,yellow};
enum class colorX:char{
    
    red,green,yellow};

int main()
{
    
    
    //使用域运算符访问枚举体成员,强转后打印
    cout<<static_cast<int>(color::green)<<endl;
    cout<<static_cast<int>(colorX::green)<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43297891/article/details/113616249