自定义类型

自定义类型

除了之前提到的整数、浮点数、数组等内置数据类型,C/C++还提供了一些自定义类型。所谓自定义类型就是允许在编程时定义新的数据类型,内置类型可以直接使用,比如可以直接定义int类型的变量,但自定义类型需要先定义类型再使用该类型。所以,自定义类型的使用分为两步:
1.定义该类型
2.使用该类型定义变量
内置类型最重要的就是数据宽度,而自定义类型更侧重于逻辑上的定义,类型本身反映了数据的逻辑特征而不是存储特征。C/C++允许的自定义类型有多种。

一、枚举类型

枚举类型只能定义枚举变量,枚举变量希望定义一种赋值被限制为有限个确定整数的变量。例如,想要定义一个变量来存储周一到周天的某一天,一种方法是定义一个普通的整数型变量,给变量赋值0-6。但这种方法可能被赋值其他类型的数值如浮点数,而且0-6这六个整数代表的意义并不那么明显。
枚举变量则可以解决这个问题,例如:

enum DAY{
   SUN=0, MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6};
enum Day day = MON; // day == 1
day = SAT; // day == 6

此时枚举变量相比于普通的整数型变量有两个优点:
1.希望将变量可赋值的范围限制在给定的有限个整数中(通常称这些整数为枚举数)
2.用有意义的标志代表这些用于赋值的整数
首先定义枚举类型,再使用这种自定义类型定义枚举变量。这里提到,只是“希望”将可赋值的范围限制到给出的有限个整数中,但是实际上完全可以为一个枚举变量赋此范围之外的其他值,例如:

enum DAY {
   a = 10,b = 20}; // 1.定义枚举类型
enum DAY day = a; // 2.定义枚举变量
day = b;
day = 30; // 可以赋值枚举数之外的整数
day = 'a'; // ,day == 97,可以赋值枚举数之外的其他被识别为整数的字面量
day = 123.45; // day == 123,可以赋值非整数类型进行隐式类型转换

在定义枚举类型时,各个枚举数可以不赋值,例如:

enum DAY {
   a = 10,b = 20,c = 30,d = 40};
enum DAY {
   a = 10,b,c,d};	// 10,11,12,13
enum DAY {
   a,b = 20,c = 5,d}; // 0,20,5,6
enum DAY {
   a,b,c,d}; // 0,1,2,3

如果第一个枚举数不赋值,则默认为0,其后不赋值则默认增加1。遇到中间赋值的则重新计算。即除对于不赋值的枚举数,默认比他前一个枚举数增加1。
定义枚举类型是,对枚举数的赋值必须是整数类型或是识别为整数类型的字面量,例如:

enum DAY {
   a = 10,b = 123.45,c = 'a',d = "abc"};
// b和d的赋值出错(这里"abc"也不能得到字符串的起始地址)

可以在定义枚举类型的同时直接定义枚举变量(其他自定义类型也有这个特性):

enum DAY {
   a = 10,b = 20,c = 30,d = 40} day,dday;	// enum DAY类型变量

也可以直接定义有某种结构但无名的枚举类型变量(其他自定义类型也有这个特性):

enum {
   a = 10,b = 20,c = 30,d = 40} day,dday; //enum <unnamed> 类型变量

显然这种枚举变量只能在第一次时定义,之后不能直接使用这个枚举类型定义新的变量。
枚举数的标识符不能是已经定义的变量名,也不能在枚举类型定义之后再使用枚举数标识符定义其他变量,例如:

int a = 1;
enum DAY {
    a = 10, b = 20, c = 30, d = 40 }; // a重定义
int b = 2; // b重定义

一个枚举变量如果不赋初始值,则不会给出默认值,和一个不赋初始值的普通变量一样。
枚举变量本身的类型是定义它的枚举的类型,但可以将一个枚举变量当作整数参与运算或赋值给其他变量,例如:

enum DAY {
    a = 10, b = 20, c = 30, d =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值