C++快速入门 (十四) 结构和联合
来源:互联网 发布:英文名与中文名 知乎 编辑:程序博客网 时间:2024/05/01 12:00
一,结构 struct
(1). 结构与类的异同
在C++中除了 结构struct 默认的访问权限为 公有,而 类class 默认的访问权限为私有 外没有任何区别。但一般的 只用结构包含一些简单的数据类型。
(2). 位域
位域就是将成员类型按位存储。如
struct DateTime
{
int a:12;
int b:16;
int c:10;
char d:9; // error 不能大于其类型的位数 char最大为8位
}date;
其中 变量 a 可以存取 十一位二进制所能表示的数(int为有符号类型,所以需要一位作符号标志位),超过则会溢出。而位域所能使用的成员类型只能一下几种且成员位数不能大于变量类型的位数。
- int
- unsigned int
- signed int
- char (C++特有)
- long (C++特有)
需要注意的是
- 位域也会自动对齐到字长度(长度对齐),
- 位域的成员变量不能取地址操作,
- 使用位域虽然节省空间,但将会降低运行速度。(空间与时间选择)
- 尽量不要让一个变量跨越两个不完整的字节,可以使用填充 0, 来对齐字节
struct DateTime
{
char a:5;
char :0; // 该字节剩余的 3位将会用 0 填充
int b:16;
int c:10;
}
(3). 另一种创建实例方法
C++经常见到另一种实例化类型或结构的简写方式(特别是结构),如
struct MyStruct
{
MyStruct():x(30) { cout << "构造器" << endl; }
int x;
} st;
cout << st.x << endl;
二,联合 union
(1). 定义
C++中的联合可以在同一个内存空间内表示多种类型。但一次只能使用一种类型。联合以占用内存最大的类型为标准初始化。
(2). 联合和类的异同
- 联合的默认成员为公有。
- 联合也需要实例化才能使用。
- 可以有成员函数,但不能自定义构造和析构函数。
- 可以使用访问限定符。
- 成员变量可以是自定义类型,但该类型不能有自定义构造和析构函数。
- 不能有静态成员和引用成员。
- 联合不能为基类,不能有虚函数。
示例如下:
int _tmain (int argc, _TCHAR* argv [])
{
union MyUnion
{
short x;
char c;
};
MyUnion un = {0x62};
cout << un.c << endl;
un.c = 'a';
cout << un.c << endl;
}
//return:
// b
// a
总结:
- 联合初始化赋值是为第一个成员赋值。并且必须带花括号。
由此示例也可以看出 x86机器确实使用小端法表示
(3). 匿名联合
匿名联合可以直接用成员名访问。但匿名联合不能有私有成员或函数。
int _tmain (int argc, _TCHAR* argv [])
{
union
{
short x;
char c;
};
x = 0x62;
cout << c << endl;
c = 'a';
cout << c << endl;
}
-
<原创文章 转载请注明出处 http://blog.csdn.net/meiwm 谢谢>
作者:meiwm
出处:http://blog.csdn.net/meiwm
本文为原创,本文版权归作者所有。欢迎转载,但请务必保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。
-
- C++快速入门 (十四) 结构和联合
- C语言入门----结构与联合
- 《C和指针》:结构和联合
- C和指针详解------结构和联合
- C语言中的结构和联合详解
- 【c基础】数据类型--结构和联合
- 快速入门C++ 05(联合、枚举和类型别名)
- C++、 C 中的结构体、联合和枚举 异同
- C和指针读书笔记——结构和联合
- 读书笔记---C和指针---第十章---结构和联合
- C 和指针读书笔记--结构体和联合
- C和指针(7)结构和联合
- 记录-C和指针-第十章-结构和联合
- C和指针—结构体和联合
- 联合和结构
- 结构、联合和枚举
- 结构和联合
- C++结构和联合
- Python正则表达式指南
- DirectUI 2D/3D 界面库集合 分析之总结
- Codeforces Round #106 (Div. 2), problem: (D) Coloring Brackets 区间DP+组合
- 老熊
- OO的五大原则中的 LSP
- C++快速入门 (十四) 结构和联合
- C#委托是怎么回事
- 大数存储——阶乘
- .net 应该怎么学
- spring声明式事务配置
- 浅谈linux内核中的idr机制
- 关于Unicode和Gbk的那些事~~
- 数据库基础知识学习-union
- RTMP协议