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),看到的一个例子:
1、对于class Airplane中的union,它是一个匿名的union,图片上面有解释,若加上名称便是type定义式,未加名称则是anonymous union,{ }内便是变数声明。
2、类的成员都可以直接使用union中声明的变量rep以及next