C++初学(10)

news2024/11/17 11:56:53

10.1、共用体

共用体是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。比如说:结构可以同时存储int、long、和double,而共用体只能存储int、long、或double。共用体的句式与结构相似,但含义不同。例如:

union one4all
{
   int int_val;
   long long_val;
   double double_val;
};

可以使用one4all变量存储int、long或double,条件是在不同的时间进行:

one4all pail;
pail.int_val=15;
cout<<pail.int _val;
pail.double_val=1.89;
cout<<pail.double_val;

pail有时可以是int变量,有时也可以是double变量。成员名称标识了变量的容量。由于共用体内次只能存储一个值,因此它必须有足够的空间来存储最大的成员,所以共用体的长度为其最大成员的长度。

共用体的用途之一是,当数据项使用两种或更多种格式(但不会同时使用时),可节省空间。如:

sturct widget
{
	 char brand[20];
     int type;
     union id
     {
         long id_num;
         char id_char[20];
     }id_val;
};
…
widget prize;
…
if (prize.type == 1)
cin >> prize.id_val.id_num;
else
cin >> prize.id_val.id_char;

匿名共用体没有名称,其成员将成为位于相同地址处的变量。

sturct widget
{
	 char brand[20];
     int type;
     union id
     {
         long id_num;
         char id_char[20];
     };
};
…
widget prize;
…
if (prize.type == 1)
cin >> prize.id_num;
else
cin >> prize.id_char;

由于共用体是匿名的,因此id_num和id_char被视为prize的两个成员,它们的地址相同,所以不需要中间标识符id_val。

共用体常用于节省空间,对于某些应用程序来说内存非常宝贵,共用体能发挥很好的作用。

10.2、枚举

C++的enum工具提供了另一种创建符号常量的方式,这种方式可以用来代替const。它还允许定义新类型,但必须按严格的限制进行。使用enum的句法与使用结构相似。如:

enum spectrum{red,orange,yellow,green,blue,violet,indigo,ultraviolet};

这条语句完成两项任务:

(1)让spectrum成为新类型的名称:spectrum被称为枚举,就像struct变量被称为结构一样。

(2)将red、orange、yellow等作为符号常量,它们对应整数值0~7。这种常量叫作枚举量。

在默认情况下,将整数值赋给枚举量,第一个枚举量是0,第二个枚举量是1,以此类推。

可以用枚举名来声明这些类型的变量:

spectrum band;

枚举变量有以下特殊性质:

(1)在不进行强制类型转化的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量,

如:可以band=blue;而不能band=2000;。因此spectrum变量受到限制,只有8个可能的值,编译器会将非enum的值赋给enum变量视为错误。

(2)对于枚举,只定义了赋值运算符。例如上面给band赋值,但是加减法之类的运算不能进行。

(3)枚举量是整型,可以被提升为int类型,但int类型不能自动转换为枚举类型:

你可以int color=blue;以及color=3+red;。表达式的3+red中的加法并非为枚举量定义,但red被转换位int类型,因此结果的;类型也是int。

10.2.1、设置枚举量的值

可以使用赋值运算符来显示地设置枚举量的值:

enum bits{onr=1,two=2,four=4,eight=8};

指定的值必须是整数,也可以显示地定义其中一些枚举量的值:

enum bigstep={first,second=100,third};

这里first默认设置为0,后面没有初始化的枚举量的值将比前面的枚举量大1,因此third的值为101。

你也可以创建多个相同值的枚举量:

enum {zero,null=0,one,numero_uno=1};

其中zero和null都为0,noe和numero_uno都为1.

10.2.2、枚举的取值范围

C++现在通过强制类型转换,增加了可赋给枚举变量的合法值。每个枚举都有取值范围,通过强制转换,可以将取值范围中的任何整数值赋给枚举变量,即使这个值不是枚举值。例如:

enum bits{one=1,two=2,four=4,eight=8};
bits myflag;

下面的代码将是合法的:

myflag=bits(6);

6不是枚举值,但是它位于枚举定义的取值范围内。

取值范围的定义:需要知道枚举量的最大值,找到大于这个最大值的、最小值的2的幂,将它减去1,得到的就是取值范围的上限。比如前面的101值,在2的幂里比这个数大的最小值是128,所以上限为127。关于下限,最小值大于0则为0,否则方法与上限一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算复杂度论文解读系列(1)《通用顺序搜索问题》---L. A. Levin

《通用顺序搜索问题》 L. A. Levin 摘要 本文研究了几种著名的“顺序搜索类型”问题&#xff0c;并证明这些问题只能在解决任何同类型问题所需的时间内得到解决。 1 简介 在阐明算法的概念之后&#xff0c;证明了许多经典问题的算法不可解性&#xff08;例如&#xff0c;群元…

【时时三省】unity test 测试框架 使用 code blocks 移植

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 目录 1&#xff0c;使用 Code::Blocks 17.12 创建工程 2&#xff0c;移植文件至该工程下&#xff1a; 移入的文件为: 被移入的文件介绍&#xff1a; 更改代码&#xff1a; 向工程添加文…

案例:LVS负载均衡群集(NAT模式)

目录 集群 集群的含义 集群分类 类型 负载均衡集群&#xff08;Load Balance Cluster&#xff09; 高可用集群&#xff08;High Availability Cluster&#xff09; 高性能运算集群&#xff08;High Performance Computer Cluster&#xff09; 负载均衡集群架构 第一层…

【练习】使用DevEco Studio编写计数器案例

效果展示 默认状态 点击加号 点击减号 知识点 类型转换&#xff08;数字 和 字符串&#xff09; 字符串转数字 方法说明例子Number()字符串 直接转数字&#xff0c;转换失败返回NaN&#xff08;字符串包含非数字&#xff09; let str1: string 1.1 console.log(Number(str1)…

游戏服务架构之 网关

游戏服务架构 长连接 游戏服务的一个特点是&#xff0c;需要维护大量的长连接来保证用户与游戏间的通信&#xff0c;比如tcp长连接、websocket双工通信等。 多服务 游戏类服务器&#xff0c;为了各个模块之间不相互影响&#xff0c;一般都是微服务的方式实现&#xff0c;比…

二叉树前序后序中序遍历

二叉树前序后序中序遍历 创建二叉树代码 private static class TreeNode {public final int value;public TreeNode left;public TreeNode right;public TreeNode(int value) {this.value value;} }public static TreeNode createTree(int[] treeArr) {TreeNode[] root new…

HarmonyOS应用开发者高级认证多选题答案(95%高正确率,8.3更新)

【多选题分数占比高&#xff0c;多选高分&#xff0c;单选稍微做下就能考试通过&#xff01;】 【多选题分数占比高&#xff0c;多选高分&#xff0c;单选稍微做下就能考试通过&#xff01;】 【多选题分数占比高&#xff0c;多选高分&#xff0c;单选稍微做下就能考试通过&a…

MongoDB聚合操作详解

文章目录 聚合操作聚合管道管道&#xff08;Pipeline&#xff09;和阶段&#xff08;Stage&#xff09;常用的聚合阶段运算符准备数据集&#xff0c;执行脚本$project$match$count$group$unwind$limit$skip$sort$lookup聚合操作案例1聚合操作案例2 聚合优化执行顺序内存排序 整…

2024有哪些开放式耳机值得入手!开放式耳机推荐!

耳机基本上已经成为我们日常生活中的必需品&#xff0c;开放式蓝牙耳机以其独特的设计&#xff0c;提供了更为自然和安全的听音体验&#xff0c;为了帮助大家更好的选择开放式耳机&#xff0c;我挑选了几个小技巧以及我自用过后觉得还不错的五款耳机推荐给大家。 一、耳机佩戴…

Day6

模板的继承 在一个网页中&#xff0c;可能会出现几个页面样式几乎不变的情况。 确实是可以在每个html文件中写重复代码&#xff0c;但是&#xff0c;假如说后期运维的话&#xff0c;如果需要在某一处修改数据&#xff0c;那用过这个代码的都得逐一修改&#xff0c;这样的运维…

端到端自动驾驶:挑战与前沿

End-to-end Autonomous Driving: Challenges and Frontiers 端到端自动驾驶&#xff1a;挑战与前沿 Abstract The autonomous driving community has witnessed a rapid growth in approaches that embrace an end-to-end algorithm framework, utilizing raw sensor input …

Wiley 旗下一区 Top 期刊编委集体辞职!难道OA真的才是大势所趋?

【SciencePub学术】Wiley作为和Springer Nature、Elsevier并驾齐驱的三大出版商之一&#xff0c;在不久前又被爆出&#xff0c;其旗下一本稳定检索了53年的老牌期刊《Philosophy & Public Affairs》&#xff0c;编委集体辞职&#xff01; 其实&#xff0c;这已经不是Wiley出…

CmsEasy逻辑漏洞--零元购

CmsEasy逻辑漏洞--零元购 选择购买MackBook 购买成功后会员中心发现多出8100快钱 然后就可以正常购买了

@antv/x6 利用interacting方法来设置禁止结点移动的方法实现。

1、官网有个设置说明。 https://x6.antv.antgroup.com/api/graph/graph 2、然后有可行的方法一&#xff1a; let graph new Graph({container: document.getElementById(container),interacting: function (cellView) {if (cellView.cell.getData() ! undefined && …

行为型设计模式2:观察者/职责链/中介者/访问者

设计模式&#xff1a;观察者/职责链/中介者/访问者 (qq.com)

【Android Studiio】default activity 原生安卓和uniapp默认启动分析(uniapp添加MainActivity)

文章目录 思路&#xff1a; 一、原生安卓二、uniapp三、在uni-app项目中&#xff0c;如果你想要加入自定义的MainActivity&#xff08;例如Android平台&#xff09; 探究方向&#xff1a;找到Default Activity 思路&#xff1a; 在Android开发中&#xff0c;"default ac…

谷粒商城实战记录-虚拟机开启密码认证登录

文章目录 一&#xff0c;虚拟机无法用用户名密码登录二&#xff0c;解决方案1&#xff0c;修改配置2&#xff0c;重启sshd服务3&#xff0c;测试SSH登录注意事项结论 参考文献 一&#xff0c;虚拟机无法用用户名密码登录 当使用Vagrant创建和管理虚拟机时&#xff0c;通常会通…

以太网ICMP测试实验

目录 一.概述 1.1IP协议 1.1.1IP协议简介 1.1.2IP协议首部报文格式 1.2ICMP协议 1.2.1ICMP协议简介 1.2.2ICMP报文格式 二.实验任务 三.模块设计 3.1总体模块设计 3.2ICMP模块设计 3.2.1icmp_rx 模块 3.2.2icmp_tx模块 四.modelsim仿真 4.1icmp_rx模块仿真 4.2i…

完美平替navicat的数据库软件DBeaver,免费开源,功能强大,使用简单

DBeaver Community 是一个免费的跨平台数据库工具&#xff0c;适用于开发人员、数据库管理员、分析师和所有与数据打交道的人。它支持所有流行的 SQL 数据库&#xff0c;如 MySQL、MariaDB、PostgreSQL、SQLite、Apache Family 等 1.到官网下载win版本直接安装 https://dbeav…

从一到无穷大 #32 TimeCloth,云上的快速 Point-in-Time Recovery

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言解决方案FAST FINE-GRAINED PITRLog FilterInter-Record Dependency ResolutionL…