C++中位域以及union联合详解

位域
bit mode:2;//mode 占 2 位
类可以将其(非静态)数据成员定义为位域(bit-field),在一个位域中含有一定数量的二进制位。当一个程序需要向其他程序或硬件设备传递二进制数据时,通常会用到位域。
位域在内存中的布局是与机器有关的
位域的类型必须是整型或枚举类型,带符号类型中的位域的行为将因具体实现而定
取地址运算符(&)不能作用于位域,任何指针都无法指向类的位域
extern “c”
(1)被 extern 限定的函数或变量是 extern 类型的
(2)被 extern “c” 修饰的变量和函数是按照 c 语言方式编译和链接的
extern “c” 的作用是让 c++ 编译器将 extern “c” 声明的代码当作 c 语言代码处理,可以避免 c++ 因符号修饰导致代码不能和c语言库中的符号进行链接的问题。
extern “c” 使用
#ifdef __cplusplusextern “c” {#endif
void *memset(void *, int, size_t);
#ifdef __cplusplus}#endif
struct 和 typedef struct
c 中
// ctypedef struct student { int age; } s;
等价于
// cstruct student { int age; };
typedef struct student s;
此时 s 等价于 struct student,但两个标识符名称空间不相同。
另外还可以定义与 struct student 不冲突的 void student() {}。
c++ 中
由于编译器定位符号的规则(搜索规则)改变,导致不同于c语言。
一、如果在类标识符空间定义了 struct student {。..};,使用 student me; 时,编译器将搜索全局标识符表,student 未找到,则在类标识符内搜索。
即表现为可以使用 student 也可以使用 struct student,如下:
// cppstruct student { int age; };
void f( student me ); // 正确,“struct” 关键字可省略
二、若定义了与 student 同名函数之后,则 student 只代表函数,不代表结构体,如下:
typedef struct student { int age; } s;
void student() {} // 正确,定义后 “student” 只代表此函数
//void s() {} // 错误,符号 “s” 已经被定义为一个 “struct student” 的别名
int main() { student(); struct student me; // 或者 “s me”; return 0;}
c++ 中 struct 和 class
总的来说,struct 更适合看成是一个数据结构的实现体,class 更适合看成是一个对象的实现体。
区别
最本质的一个区别就是默认的访问控制
(1)默认的继承访问权限。struct 是 public 的,class 是 private 的。
(2)struct 作为数据结构的实现体,它默认的数据访问控制是 public 的,而 class 作为对象的实现体,它默认的成员变量访问控制是 private 的。
union 联合
联合(union)是一种节省空间的特殊的类,一个 union 可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当某个成员被赋值后其他成员变为未定义状态。联合有如下特点:
默认访问控制符为 public
可以含有构造函数、析构函数
不能含有引用类型的成员
不能继承自其他类,不能作为基类
不能含有虚函数
匿名 union 在定义所在作用域可直接访问 union 成员
匿名 union 不能包含 protected 成员或 private 成员
全局匿名联合必须是静态(static)的
union 使用
#include《iostream》
union uniontest { uniontest() : i(10) {}; int i; double d;};
static union { int i; double d;};
int main() { uniontest u;
union { int i; double d; };
std::cout 《《 u.i 《《 std::endl; // 输出 uniontest 联合的 10
::i = 20; std::cout 《《 ::i 《《 std::endl; // 输出全局静态匿名联合的 20
i = 30; std::cout 《《 i 《《 std::endl; // 输出局部匿名联合的 30
return 0;}
c 实现 c++ 类
c 实现 c++ 的面向对象特性(封装、继承、多态)
(1)封装:使用函数指针把属性与方法封装到结构体中
(2)继承:结构体嵌套
(3)多态:父类与子类方法的函数指针不同
写在最后:对于准备学习c/c++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!


2017年AMOLED产能有望成长46%,三星的扩产仍无法满足市场
苹果发布16寸Macbook Pro,英特尔的处理器搭配AMD的显卡
怎么把clob字段转换为字符串
CKS32F4xx系列MCU SysTick定时器的原理及使用方法
AI相关专利中国数量领先 但质量方面远远比不过美国
C++中位域以及union联合详解
德信科技推出15W立体声D类音频放大器EUA2110
全系列三极管应用参数和代换大全
功率放大器电路中的三极管和MOS管,究竟有什么区别?
什么是显卡的核心代号
视频会议系统中常见的疑难问题解答
采用CX24430芯片为核心设计具备音频解码功能的数字电视机顶盒
咪鼠智能语音鼠标S5B 语音打字 高颜值双模 全新升级
清溢光电首次公开募股开始,拟募资4亿投建8.5代高精度掩膜版
旋涂法制备的ZnO薄膜的电学特性报告
电容器规格种类详细介绍
PLC串口通讯和基本通讯接口
电机旋转借助磁铁、磁力
米家扫拖机器人1C开启预售 售价1299元
如何正确使用万用表轻松查出漏电原因