作用域内枚举(C++11)

//作用域内枚举

#include<iostream>

using namespace std;

/*
	下面这两种定义枚举的方式有错误,错误提示为枚举数sum重定义。
	在C++11之前我们不能在类中定义两个枚举类型有相同的枚举数。这样会导致枚举数重定义的错误。
*/
//class Test1
//{
//public:
//	enum {sum = 10};
//	enum {sum = 20};
//};
//class Test2
//{
//public:
//	enum grade{sum = 10};
//	enum age{sum = 20};
//};

/*
C++11提供了定义域内枚举的使用方法,我们可以在类中定义两个枚举类型拥有相同名称的枚举数,前提是用class关键字修饰枚举变量名称。
并且枚举变量的作用域为类内。
*/
class Test3
{
public:
	enum class grade{sum = 10};
	enum class age{sum = 20};
};

/*
无论是C++11之前的枚举变量还是新的作用域内枚举,我们都可以显示的给枚举类型提供类型,前提是整形。
*/
class Test4
{
public:
	enum :long{sum = 123};
};

class Test5
{
public:
	enum class grade:long { sum = 123 };
};

/*
另外,常规枚举可以和整形变量自动转换,存在隐患,作用域内枚举则不能隐式的转换为整形;
*/
class Test6
{
public:
	enum{sum = 10};
	void show()
	{
		int number = sum;
		cout << number << endl; ////常规枚举可以自动转换为整形
	}
};

class Test7
{
public:
	enum class grade{sum = 10};
	void show()
	{
		//int number = sum;  //此时不能隐式的转换为整形,但是可以进行显示的转换
		int number = (int)grade::sum;
		cout << number << endl;
	}
};

int main()
{

	cin.get();
	return 0;
}

时间: 2024-10-10 00:27:59

作用域内枚举(C++11)的相关文章

C++学习笔记之作用域为类的常量和作用域内的枚举

一.作用域为类的常量 有些情况下,使符号常量的作用域为类很有用.如,类声明(不是定义)可能使用字面值30来指定数组长度,由于该常量对于所有对象来说都是相同的,因此创建一个由所有对象共享的常量是个不错的主意,也许我们想像下面这样做: 1 class Weather 2 { 3 private: 4 const int Months = 12; //声明一个常量 5 double temperature[Months]; 6 ... 7 } 要注意的是,我们这是在声明阶段,需要在声明类的时候就有一个

php中在局部作用域内访问全局变量

php中,由于作用域的限制,导致变量的访问限制: 1.局部作用域内不能访问全局变量 2.全局作用域内不能访问局部变量 对于第一种情况,如下代码将不能正常运行: <?php //局部作用域(函数内)使用全局变量 $a = 1;//在全局作用域内的变量 function test() { echo "a = {$a}<br />";//在局部作用域中访问全局作用域变量 } test(); /* 运行结果: Notice: Undefined variable: a in

如果局部变量与实例变量同名,那么如何在局部变量的作用域内引用实例变量?

public class Sample{ private int a=1; //实例变量 public void b() { int a=2; //局部变量 System.out.println("局部变量:a="+a); System.out.println("实例变量:a="+this.a);//局部变量的作用域内引用实例变量:this.变量名 } public static void main(String[] args) { new Sample().b()

C++11新标准

1. 新类型 long long和unsigned long long: char16_t 和 char32_t: 新增原始字符串: 2. 统一的初始化 C++11扩大了用大括号括起的列表(初始化列表)的适用范围,使其可以用于所有内置类型和用户定义的类型(即类对象). 使用初始化列表时,可添加 “=”,也可不添加. int x = { 5 } ; double y = { 2.75 } ; short quar [ 5 ]  { 4 , 5 , 2 , 76 , 1 } ; 另外,列表初始化语法

四大域对象,和jsp的九大隐式对象,已经el表达式的11个隐式对象

四大域对象 1.PageContext :页面范围的数据 2.ServletRequest:请求范围的数据 3.HttpSession:回话范围的数据 4.ServletContext:应用范围的数据 JSP的九大隐式对象 1.out 输出流对象 2.request请求对象 3.response 响应对象 4.config 配置对象 5.session 回话对象 6.application 应用程序对象 7.page 页面对象 8.pageContext 页面上下文对象 9.exception

C++易混淆知识点整理

// 1 /////////////////////////////////////////////////////////////////////// // 常量指针:变量不可修改,指针可修改 const int *p; int const *p; // 指针常量:指针不可修改,变量可修改 int *const p; // 指针解引用之前,一定确保已被初始化为一个确定/合适的地址 int *p; // 分配了指针p的内存,但并没有初始化,指针所指向的数据的内存不知道 // 指向数组的指针:指向

C++学习笔记(3)

本学习笔记是C++ primer plus(第六版)学习笔记.是C++学习笔记(2)的后续.复习C++基础知识的可以瞄瞄. 转载请注明出处http://www.cnblogs.com/zrtqsk/p/3881141.html,谢谢!如下. 第九章 1.C++程序的组成—— (1).头文件: 包含结构声明和使用这些结构的原型. (2).源代码文件: 包含与结构有关的函数的代码. (3).源代码文件: 包含调用与结构有关的函数的代码. 2.头文件—— (1).常包含的内容: 函数原型:#defin

C++_新特性总结与未来的路

了解C++之后,可以阅读一些高级主题和面向对象编程相关的书籍: OOP有助于开发大型的项目,并提高其可靠性: OOP方法的基本活动之一就是发明能够模拟当前情况的类.当前情况被统称为问题域. 由于实际问题通常很复杂,因此找到适当的类非常富有挑战性: 创建复杂系统时,从空白开始通常不可行,最好采用逐步迭代的方式开始: 最重要的是,在分析和设计阶段完成尽可能多的迭代工作,而不要不断修改实际代码: 常用的技术有两种: 1)用例分析 开发小组列出常见的使用方式或最终系统将用于的场景:找出元素.操作和职责:

【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.