C++学习笔记(三)

复合类型( 下)://结构体、共用体和枚举

1.结构体S有两个成员, S a 与 S b,可以直接用a=b 的方法给a赋值。

2.结构中的位字段:

  结构体中的成员被指定位数。字段类型要求为整型或枚举型,然后是冒号和所指定使用的位数。每个成员都被称为位字段。形如:

  struct torgle_register

  {

      unsigned int SN:4;//占4位

      unsigned int:4;//可以没有成员变量名

      bool goodIn:1;

      bool goodTorgle:1;

  };

3.union 共同体:当数据线有两种或两种格式(但不会同时使用时),可节省空间。如一个物品的价格可以为int 或 double 但不同时是。

union的长度为它最大成员的常盾。

匿名共用体:没有名称,匿名共用体中的变量被视为处于相同地址处的变量,每次仅有一个成员是当前成员

示例:

struct widget

{

  char brand[20];

  union

  {

    long id_num;

    char id_char[20];

  };

};

...

widget prize;

...

if(A) //满足条件A与不满足不同时成立

    cin>>prize.id_num;

else

    cin>>prize.id_char;

 

4.枚举

传统枚举:enum bigstep { first,second=100,third};三个值分别为0,100,101;

枚举的取值范围:每个枚举都有取值范围,方便用于强转。范围上限为比枚举中最大值大一点的2的最小幂减一:如bigstep最大值为101,与它接近的幂为128,再减一为127,因此范围上限为127。当枚举量的最小值不小于零,则下限为0,否则,采用与寻找上限相同的方式,但加上负号:如最小枚举量为-6,则下限为-(8-1)即-7。

枚举的强制转换:不强制转换时,只能将定义的枚举量赋给该种枚举的变量,如first=third;

     但是first=10;这种不可以。但是可以int a = first。即枚举赋给整型。且枚举没有算数运算。

  强转时,可以将其他类型赋予枚举类型,如bigstep last = (bigstep) (0)。

 

建议使用的枚举类:枚举类即强类型枚举,用enum class语法来声明:

enum class Enumeration

{

  VAL 1,

  VAL 2,

  VAL 3=100,

  VAL 4,

};

枚举类的优点是当两个不同枚举具有相同名称的元素时,其中一个元素将不能正常使用,因此引入枚举类后可以解决这个问题。

这个是C++11中的新语法。同时支持枚举类型的前置声明,如:

enum class Enum1:unsigned int;

举例:

enum class TrafficLight{RED,YELLOR,GREEN};
enmu class Clolor:char;  //前置声明枚举类
void Foo(Color*p);        //前置声明的使用
//....................
enum class Color:char{RED,GREEN,BLACK,WHITE};                       //前置声明的定义

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值