C++类中的枚举类型

在看effective c++的时候,其中第二条边指出。尽量使用const ,enum代替define。在写程序的时候,需要入参为设备类型,第一反应是枚举一个设备类型,并以名字命名。但是有一个问题挺困惑的,类中的枚举到底是以什么形式存在的?枚举变量需不需要分配内存?

带着这个问题,咱们来做一个实验。

  1. class test
  2. {
  3. public:
  4. enum type{One,Two, Three};
  5. private:
  6. };
  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9. cout << sizeof(test)<<endl;
  10. return 0;
  11. }

输出:

想想其实也很容易明白,此时就是在类的内部声明了一个枚举类型。并没有声明这个枚举类型的变量。此时如果加上一个枚举类型的变量的声明,再来测试一下这个类的大小。其中枚举为公有的,我们试着用 类::enum值 调用该枚举值,看其是否能够被调用。

  1. class test
  2. {
  3. public:
  4. enum type{One=2,Two, Three};
  5. test():t(One)
  6. {
  7. }
  8. type getT()
  9. {
  10. return t;
  11. }
  12. private:
  13. type t;
  14. };
  15. int _tmain(int argc, _TCHAR* argv[])
  16. {
  17. test s;
  18. cout << sizeof(test)<<endl;
  19. cout<<s.getT()<<endl;
  20. cout << test::Three<<endl;
  21. return 0;
  22. }

输出:

此时类的大小是一个int型变量的大小。取得的枚举是一个整形。可以通过类域访问到枚举值。为什么通过 类::enum值可以访问枚举值?

因为该枚举是一个常量,在编译的时候已经被放入了常量区。调用的时候因此不需要该枚举的变量也可以调用。

注意:枚举类型不具备名字空间的作用。在一个作用域中在,如果两个枚举类型的值相同,则会编译出错。

  1. struct CEType
  2. {
  3. enum EType1 { e1, e2 };
  4. enum EType2 { e1, e2 };
  5. };

e1,e2名字相同程序会报错。

来自为知笔记(Wiz)

时间: 2024-10-12 13:54:07

C++类中的枚举类型的相关文章

C#中的枚举类型(enum type)

ylbtech 原文 C#中的枚举类型(enum type) 概念 枚举类型(enum type)是具有一组命名常量的独特的值类型.在以下示例中: enum Color { Red, Green, Blue } 声明一个名为 Color 的枚举类型,该类型具有三个成员:Red.Green 和 Blue. 枚举具体是怎么声明呢?枚举声明用于声明新的枚举类型.枚举声明以关键字 enum 开始,然后定义该枚举类型的名称.可访问性.基础类型和成员.具体格式: 修饰词(new.public.protect

C# 中的枚举类型 enum (属于值类型)

原文 C# 中的枚举类型 enum (属于值类型) C# 支持两种特殊的值类型:枚举和结构. 声明枚举:声明时要声明所有可能的值. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace enumType { enum Season // enum 类型定义在 class 外面 { Spring, Summer, Fall, Winter // 最后一个元素后面

浅谈java中的枚举类型(转)

用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. enum Signal { GREEN, YELLOW, RED } pu

Java自学-类和对象 枚举类型

枚举类型 步骤 1 : 预先定义的常量 枚举enum是一种特殊的类(还是类),使用枚举可以很方便的定义常量 比如设计一个枚举类型 季节,里面有4种常量 public enum Season { SPRING,SUMMER,AUTUMN,WINTER } 一个常用的场合就是switch语句中,使用枚举来进行判断 注:因为是常量,所以一般都是全大写 public class HelloWorld { public static void main(String[] args) { Season se

WebService中使用枚举类型

1.在服务端编写枚举值 public enum BackWorkType { None, Test } 2.为每一个枚举值添加下面属性,添加下面属性后服务可以通过对象字符串进行序列化 [EnumMember(Value = "None")] 3.添加完后枚举变成 public enum BackWorkType { [EnumMember(Value = "None")] None, [EnumMember(Value = "Test")] Te

Java中的枚举类型

枚举类型可以限定只能取特定值中的某一个. 这个是在编译器就可以限定的. 记住一个原则,错误越早发现越好,尽量在编译器发现. 枚举使用enum(小写)关键字 是java.lang.Enum类型,since jdk1.5 语法 public enum MyColor { red, green, blue };//限定了,用户如果要使用MyColor类型的话,就只能呢使用red,green或者blue三者之一. { MyColor m = MyColor.red; switch(m) {//枚举类型的

struct框架中实体类中属性的类型错误问题

在struct框架中,我们会写出实体类然后再sqlmap中进行映射,通常我们都知道 java中date类型有java.sql.date 和 java.util.date 经过细心发现,将对象生成为json对象时,json类会将date类型转换成java.util.date 如果在实体类中写成java.sql.date,就会抛出异常 下面我就来传个图 这里仅仅只需要把实体中date类型导入的包改成util的便不会出错 有人说util的包更常用,其实sql包中的直接输入就和我们平时写的时间的差不多,

C#中的枚举类型enum用法

定义一个简单的枚举类型:   enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};        //这时候         Days.Sat = 0 ,后面依此递增. 当然也可以手动指定起始值:   enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri}; //这样就从1开始了. 枚举型的隐含类型为 int 型, 例如 int x=(int)Days.Sat ; 一点问题没有.据MSDN说枚举类型的隐含类型可以为除

如何在类中根据枚举值,获取枚举的message的工具类

枚举类为: public enum OrderStatusEnum implements CondeEnum{ NEW(0, "新订单"), FINISHED(1, "完结"), CANCLE(2, "取消"); private Integer code; private String msg; OrderStatusEnum(Integer code, String msg) { this.code = code; this.msg = msg