C++类中嵌套enum(枚举)、union(联合)、struct(结构体)类型

1、枚举

#include <iostream>

using namespace std;

class test
{
public:
	enum type{
	    One=2,Two, Three
        };

	test():t(One) {}
	type getT() {return t;}

private:
	type t;
};

int main()
{
	test s;
	cout << sizeof(test)<<endl; //4
	cout<<s.getT()<<endl; //2
	cout << test::Three<<endl; //4
	return 0;
}

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

为什么通过 类::enum值可以访问枚举值?
因为该枚举是一个常量,在编译的时候已经被放入了常量区。调用的时候因此不需要该枚举的变量也可以调用。

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

      struct CEType
               {
                   enum EType1 { e1, e2 };
                   enum EType2 { e1, e2 };
               };

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

参考:
1、C++类中的枚举类型
2、https://blog.****.net/WizardtoH/article/details/81010433

2、联合、

这个主要是看侯捷先生的内存管理的视频,在写类自己的allocator时(内存管理视频13,per_class allocator 2),看到的一个例子:
C++类中嵌套enum(枚举)、union(联合)、struct(结构体)类型

1、对于class Airplane中的union,它是一个匿名的union,图片上面有解释,若加上名称便是type定义式,未加名称则是anonymous union,{ }内便是变数声明。

2、类的成员都可以直接使用union中声明的变量rep以及next