十九章:Union联合体 和 enum 枚举

版权声明:如需转载请博客下面留言,并在转载时请标明出处,并附带链接! https://blog.csdn.net/patrick_star_cowboy/article/details/79995585
一丶Union联合体

知识点1:union是一种特殊的类,可以包含多个数据成员,但是在任意时刻只能有一个数据成员可以有值,其他成员属于未定义的状态,分配给union的内存只要能存储它的最大数据成员即可
知识点2:union中不能含有引用类型的成员,但不可继承、不含有虚函数
知识点3:union的名字就相当于一个类型名,可以使用一对花括号显式初始化:
union Token {};//后面的分号勿忘
Token first_elem = { ' a' };//初始化第一个成员
知识点4:匿名的union,没有名字,其中的成员可以直接访问,匿名union不能包含受保护成员和私有成员,也不能包含成员函数
知识点5:我们通常将含有类类型成员的union内嵌在另一个类之中,将其定义为匿名union,将自身类类型成员的控制权转移给该类

二丶enum枚举
知识点1:枚举类型使得我们可以将一组整型常量组织在一起,但是每一个枚举类型都定义了一种新的类型
知识点2:C++11新标准引入了限定作用域的枚举类型,带有class或struct关键字的,就是限定作用域的枚举类型,形式为enum (class/struct) XX { 枚举成员 };,注意后面需要加分号结尾,若enum没有名字,那么我们只能在定义时初始化该对象
知识点3:在限定作用域的枚举类型中,遵循常规的作用域准则,在枚举类型作用域外不可访问,不限定作用域的枚举类型,枚举成员的作用域和枚举类型本身的作用域相同(一般来说两个不限定作用域的枚举类型的成员不可以相同,因为其作用域是相同的,会重复定义)
知识点4:默认情况下,枚举成员的枚举值从0开始,依次加1,但我们也可以为枚举成员指定初值
知识点5:枚举成员是const的,所以赋值时必须使用常量表达式
知识点6:要想初始化一个enum对象或者为enum赋值,必须使用该类型的一个枚举成员或者该类型的另一个对象,不限定作用域的枚举类型的对象或其枚举成员会自动转换为整形
知识点7:C++11新标准,可以在enum之后加上冒号再加上我们想在enum中使用的类型:enum:unsigned int {},默认情况下为int。可以先声明不定义
知识点8:成员指针是指可以指向类的非静态成员的指针,由于类的静态成员不属于任何对象,所以无需特殊的指向该成员的指针,成员指针的类型需要包括类的类型和成员的类型,例如:const string Screen:: *p,一个指向Screen类的const string成员的指针p

三丶成员指针
知识点1:在给成员指针赋值时,我们将取址运算符作用域screen的成员而不是内存中的一个类的对象的成员
知识点2:我们需要注意,当我们初始化一个成员指针或为成员指针赋值时,该指针并没有指向任何数据,成员指针只指定了成员而非该成员所属的对象,只有解引用成员指针时我们才提供对象的信息
知识点3:成员指针的访问运算符:.*或者->*,可以获得对象的指定成员
知识点4:由于在类中数据成员一般都是私有类型的,所以通常我们不能直接获得数据成员的指针,最好的方法就是定义一个函数,返回一个指向该成员的指针(return &XX)

猜你喜欢

转载自blog.csdn.net/patrick_star_cowboy/article/details/79995585
今日推荐