C++基础(4.4-4.5)——struct&union

struct & union

/* 定义 */
struct StructName {
	int attribute_1;
	char attribute_2[20];
	double attribute_3;
};

/* 声明 */
struct StructName s1;
StructName s2;	/* C++允许在声明结构变量时省略关键struct  */

/* 初始化 */
struct StructName {1, "hello", 1.1};
struct StructName={1, "hello", 1.1}; /* 等号是可选的 */
struct StructName {}; /* 如大括号内未包含任何东西,attribute_1、attribute_3都被设置为零,且attribute_2每个字节被设置为零 */
/* 最后, 不允许缩窄转换 */

/* 赋值 */
/* 可以直接使用(=)将struct赋值给另一个同类型struct, 
这样结构中的成员都将被设置为另一个结构中相应成员的值, 
即使成员是数组,这种赋值被称为成员赋值(memberwise assignment) */
struct Me {
	char name[20];
	int age;
} s1 {
	"JianRong"
	26
};

struct Me s2 = s1;
cout << s2.name << "\t" << s2.age << endl; /* JianRong 26*/

/* 结构数组 */
Me me[100];	/* create one hundred me ^-^*/
cin >> me[0].name; 
cout << me[0].name << endl;

Me mes[100] = {
	{"JianRong", 26},
	{"JianRong", 26}
};
cout << mes[0].name << endl;
cout << mes[1].age << endl;

/* 结构中的位字段 */
/* 与C语言相同,C++也允许指定占用特定位数的结构成员,这使得创建与某个硬件
设备上的寄存器对应的数据结构非常方便。
 */
 struct torgle_register 
 {
 	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_register tr = {14, true, false};
 
 /* 位字段通常用在低级编程中,一般来说,可以使用整形和按位运算符代替这种操作 */

union

/*共用体(union)是一种数据格式,它能够存储不同的数据类型,但只能同时存储一种一种 */
union one4all 
{
	int int_val;
	long long_val;
	double double_val;
};
/* 可以使用one4all变量存储int、long或double,但是要在不同时间运行
而由于共用体每次只能存储一个值,因此它须有足够的空间存储最大的成员,所以
共用体的长度为其最大成员的长度 */
one4ll pail;
pail.int_val = 15;		// strore an int
pail.double_val = 1.38; // store a double, int value is lost

/* 匿名共用体 */
/* 匿名共用体(anonymous union)没有名称,其成员将成为位于相同地址处的变量, 但相同时间只能有一个成员为当前成员 */
struct widget 
{
	char brand[20];
	int type;
	union	// anonymous union
	{
		long id_num;		// type 1 widgets
		char id_char[20];	// other widgets
	}
};

...
widget prize;
...
if (prize.type = 1)
	cin >> prize.id_num;
else
	cin >> prize.id_char;
/* 共用体长用于节省内存,也常用于操作系统数据结构或硬件数据结构 */
每个较大的开源项目都有自己的风格指南: 关于如何为该项目编写代码的一系列约定 (有时候会比较武断). 当所有代码均保持一致的风格, 在理解大型代码库时更为轻松. C++ 是 Google 大部分开源项目的主要编程语言. 正如每个 C++ 程序员都知道的, C++ 有很多强大的特性, 但这种强大不可避免的导致它走向复杂,使代码更容易产生 bug, 难以阅读和维护. 本指南的目的是通过详细阐述 C++ 注意事项来驾驭其复杂性. 这些规则在保证代码易于管理的同时, 也能高效使用 C++ 的语言特性. 风格, 亦被称作可读性, 也就是指导 C++ 编程的约定. 使用术语 “风格” 有些用词不当, 因为这些习惯远不止源代码文件格式化这么简单. 使代码易于管理的方法之一是加强代码一致性. 让任何程序员都可以快速读懂你的代码这点非常重要. 保持统一编程风格并遵守约定意味着可以很容易根据 “模式匹配” 规则来推断各种标识符的含义. 创建通用, 必需的习惯用语和模式可以使代码更容易理解. 在一些情况下可能有充分的理由改变某些编程风格, 但我们还是应该遵循一致性原则,尽量不这么做. 本指南的另一个观点是 C++ 特性的臃肿. C++ 是一门包含大量高级特性的庞大语言. 某些情况下, 我们会限制甚至禁止使用某些特性. 这么做是为了保持代码清爽, 避免这些特性可能导致的各种问题. 指南中列举了这类特性, 并解释为什么这些特性被限制使用. Google 主导的开源项目均符合本指南的规定. 注意: 本指南并非 C++ 教程, 我们假定读者已经对 C++ 非常熟悉.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值