C++基础:(三)枚举、结构体、联合体数据类型

C++自定义的数据类型:枚举类型、结构类型、联合类型、数组类型、类类型。

枚举

C++的enum提供了一种创建符号常量的方式,可以代替const!

# 声明形式
enum 枚举类型名字 {变量列表}
for example:
enum WeekDay{SUN, MON, TUE, WED, THU, FRI, SAT};
  • 定义WeekDay这个新类型名称,WeekDay被称为枚举
  • SUM,MON,TUE…等称为符号常量,默认对应整数0-7,这些常量叫做枚举量

应用说明

  1. 对枚举量按照常量(const)处理,不能对它们赋值。比如SUN=0是非法语句。
  2. 枚举类型可以在声明时定义枚举量的值(必须是整数),如
enum WeekDay{SUN=7, MON=1, TUE, WED, THU, FRI, SAT};

定义SUN为7,MON为1,以后顺序+1,SAT=6

  1. 枚举类型可以创建多个值相同的枚举量
enum {zero,null=0, one, numero_uno=1};

其中zeronull都为0,oneumero_uno都为1。
在C++早期版本中,只能将int值赋给枚举量,这种限制被取消了,现在可以使用long类型

  1. 枚举类型可以进行关系运算
  2. 可以通过 强制转换 给枚举变量赋值,每个枚举都有取值范围,通过强制类型转换,可以将取值范围中任何整数值赋给枚举变量。 比如:
enum bits{one=1, two=2, four=4, eight=8};
bits myflag;
myflag=bits(6);

其中6不是枚举值,但是位于枚举定义的范围之内。
赋值语句也可以写成myflag=static_cast<bits>(6)

  1. 取值范围,上限:比最大值大的2的幂,下限:比最小值小的2的幂(包括负数)

结构体

结构体是一种特殊形态的类,有自己的数据成员和函数成员,可以有自己的构造函数和析构函数,可以控制访问权限,可以继承,包含多态等。

  • 结构体与类的唯一区别在于,结构体和类具有不同的默认访问控制属性:在类中,对于未指定访问控制属性的成员,其访问控制属性为私有型(private);在结构体中,对于未指访问控制属性的成员,其访问控制属性为共有型(public)。
  • So结构体中,把公有成员放在最前面,则最前面的“public:”可以省略,按下面的语法定义:
struct {
	公有成员
	protected:
	保护型成员
	private:
	私有成员
};
  • C++为何要引入结构体?
    • 原因是为了保持和C的兼容性
    • C++在struct之外引入class关键字作为定义抽象数据类型的首选关键字,为了保持和C的兼容,C++保留了struct关键字,并规定结构体的默认访问控制权为共有型。
    • 在程序中定义一些没有什么操作的数据类型,方便保存,这样可以考虑结构体,相比类更加方便地对数据成员操作。

应用说明

  • 结构体可以在main函数外部或者内部定义,内外使用范围不同
  • 初始化方式:类型名 变量名={成员数据1初值,成员数据2初值,......}
  • 可以作为参数传递,可以使用操作符(=)赋值给另一个同类型的结构体。
  • 定义结构和创建结构可以同时完成:
   struct POINT
   {
   		int x;
   		int y;
   }point1,point2;
  • 可以初始化变量
	struct POINT
	{
		int x;
		int y;
	}point={3, 4};
  • 声明没有名称的结构体,省略名称,同时定义一种结构类型和一个这种类型的变量:
struct{
	int x;
	int y;
}position;
  • 结构体中的位子段:与C一样,C++允许指定占用特定位数的结构成员,如:
struct torgle{
	unsigned int SN:4; //4 bits for SN value
	unsigned int: 4;	//4 bits unused
	bool goodIn: 1;		//valid input(1 bit)
	bool goodTorgle: 1;	//successful torgling
};

用一般方法初始化
torgle tr={14,ture,false};

联合体

联合体(union)是一种数据类型,能够存储不同的数据类型,但只能同时存储其中的一种类型。联合体是一种特殊形态的类,有自己的数据成员和函数成员,可以有自己的构造函数和析构函数,可以控制访问权。与结构体一样,从C继承而来,默认访问控制属性为共有类。
联合体的全部数据成员共享一组内存单元
语法格式:

union 联合体名称
{
	公有成员
	protected:
	保护型成员
	private:
	私有成员
};

应用说明

  • 由于联合体的成员公用相同的内存单元,联合变量中的成员同时至多只有一个是有意义的,不同的数据单元公用相同的内存单元。
  • 联合体的各个对象成员,不能有自定义的构造函数、自定义的析构函数和重载运算符,其对象成员也不能有
  • 联合体不能继承,不支持多态
  • 一般用联合体来存储公有数据,不定义函数成员
  • 联合体不声明名称则为无名联合体,只是声明一个成员项的集合,这些成员项具有相同的内存地址,由成员项的名字直接访问。如:
union{
	int i;
	float f;
}
i=10;
f=2.2;
  • 无名联合体通常用作类或结构体的内嵌成员
struct Student{
	char name[10];
	char sex;
	union{
		long id;
		char id_char[20];
	}
};
Student DaMing,Lili;
DaMing.id=1232;
Lili.id_char="xx44123";
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值