长安的花

当学问走过漫漫古道
凿刻入千窟,心也从愚昧中苏醒

0%

c++学习09-联合枚举类型别名

联合(union)

  1. 联合与结构有很多相似之处,联合也可以容纳多种不同类型的值,但是它每次只能存储这些值中的某一个。
  2. 例如:我们要定义一个变量来存放某种密码,我们可以选择是你女朋友的生日、身份证最后4位数字或者你养的宠物的名字等等。
  3. 联合类型将是一个不错的选择

举例

1
2
3
4
5
6
union  mima
{
unsigned long birthday;
unsigned short ssn;
char* pet;
};
  • 定义了这个联合类型之后,就可以像下面这样创建一个该类型的变量了:

mima mima_1;

  • 每次只能存贮这些值中的摸某一个

  • 再接下来,我们可以像对结构成员进行赋值那样对联合里的成员进行赋值,使用同样的语法:
    mima_1.birthday = 19881301;

  • 上边这条语句是将值 19881301 存入 mima_1 联合的 birthday 里边。如果我们再执行下边语句:
    mima_1.pet = “Chaozai”;

  • 这个联合将把 “Chaozai” 存入 mima_1 联合的 pet 成员,并丢弃 birthday 成员里的值。

程序实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>

union mima//声明一个联合
{
unsigned long birthday;
unsigned short ssn;
char* pet;
};

int main()
{
mima mima_1;

mima_1.birthday = 19881301;
std::cout << mima_1.birthday << "\n";

mima_1.pet = "Chaozai";
std::cout << mima_1.pet << "\n";
std::cout << mima_1.birthday << "\n";

return 0;
}

输出

1
2
3
19881301
Chaozai
4210691//这只是一个地址

枚举(enum)

枚举(enum)类型用来创建一个可取值列表

enum weekdays { Monday, Tuesday, Wednesday, Thursday, Friday };

  • 定义一个枚举类型之后,我们就可以像下面这样创建该类型的变量:
    weekdays today;
  • 然后我们像下边的方式对他进行赋值
    today = Thursday;

举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>

int main()
{
enum weekdays{ Monday, Tuesday, Wednesday, Thursday, Friday };

weekdays today;

today = Monday;
std::cout << today << "\n"; // 0

today = Tuesday;
std::cout << today << "\n"; // 1
}

输出

1
2
0
1

枚举的值不是字符串;

编译器会按照各个枚举值在定义时出现的先后顺序把它们与 0 ~ n-1 的整数(n 是枚举值的总个数)分别关联起来。

优点

  • 它们对变量的可取值加以限制;
  • 它们可以用做 switch 条件语句的 case 标号
  • 字符串是不能作为标号用的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>

int main()
{
enum weekdays{ Monday, Tuesday, Wednesday, Thursday, Friday };

weekdays today;

today = Monday;
std::cout << today << "\n"; // 0

today = Tuesday;
std::cout << today << "\n"; // 1

switch (today)
{
case Monday://这里可以用,因为Monday是一个整数,一个值
/* code */
break;

default:
break;
}
}

类型别名

最后我们来介绍 Typedef 保留字,使用它可以为一个类型定义创建一个别名

例如,我们不喜欢使用 int* 来创建指针,可以像下边这样定义一个类型别名:

typedef int* intPointer;

这个时候就可以用下面的方法来定义整形指针

intPointer myPointer;

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道