C++ 自定义数据类型

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

1. typedef 声明

在编写程序时,除了可以使用内置的基本数据类型名和自定义的数据类型名以外,还可以为一个已有的数据类型另外命名。这样,就可以根据不同的应用场合,给已有的类型起一些有具体意义的别名,有利于提高程序的可读性。给比较长的类型名另起一个短名,还可以使程序简洁。typede就是用于将一个标识符声明成某个数据类型的别名,然后将这个标识符当作数据类型使用。
语法形式为:

typedef 已有类型名 新类型名表;

其中,新类型名表中可以有多个标识符,它们之间用逗号隔开。可见,在一个typedef语句中,可以为一个已有的数据类型声明多个别名。
例如:

#include<iostream>
using namespace std;

//1.typedef
typedef double Area, Volume;
typedef int Natural;
Natural i1, i2;
Area a;
Volume v;

int main()
{
	i1 = 20;
	i2 = 30;
	a = 12.23;
	v = 23.34;
	cout << i1 << endl;
	cout << i2 << endl;
	cout << a << endl;
	cout << v << endl;
	return 0;
}

运行结果:
在这里插入图片描述

2. 枚举类型 enum

在解决实际问题时会遇到这样的情形:一场比赛的结果只有胜、负、平局、比赛取消4种情况;一个袋子里面只有红、黄、蓝、白、黑5中颜色的球;一个星期只有星期一、星期二、…、星期日7天。上述这些数据只有有限的几种可能值,虽然可以用int,char等类型来表示它们,但是对于数据的合法性检查却是一件很麻烦的事情。例如,如果用0~6来代表一个星期的7天,那么变量值为8便是不合法数据。C++中的枚举类型就是专门解决这类问题的。
只要将变量的可取值一一列举出来,便构成了一个枚举类型。枚举类型的声明形式如下:

enum 枚举类型名 {变量值列表}

例如:

enum weekday{SUN,MON,TUE,WED,THU,FRI,SAT};
枚举类型应用说明

(1)对于枚举元素按常量处理,不能对它们赋值。例如,下面的 语句时非法的:

enum weekday{SUN,MON,TUE,WED,THU,FRI,SAT};
SUN=0;//SUN是枚举元素,此语句非法

(2)枚举元素具有默认值,它们依次为:0,1,2,…。例如,上例中SUN 的值为0,MON为1,THU为2,…,SAT为6。
(3)可以在声明的时候另行定义枚举元素的值,如:

enum weekday
{
	SUN=7,MON=1,TUE,WED,THU,FRI,SAT
};

定义SUN为7,MON为1,往后的枚举元素的值顺序加一,SAT为6。
(4)枚举值可以进行关系运算
(5)整数值不能直接赋值给枚举变量,如果需要将整数赋给枚举变量,应进行强制转换。
【例】设某次体育比赛结果有4种可能:胜(WIN)、负(LOSE)、平局(TIE)、比赛取消(CANCEL),编写程序顺序输出这四种情况。

enum GameResult
{
	WIN,
	LOSE,
	TIE,
	CANCLE
};
int main()
{
	GameResult result;//声明变量时,可以不写关键字enum
	GameResult omit = CANCLE;  //enum GameResult omit = CANCLE
	for (int count = WIN; count <= CANCLE; count++)//隐含类型转换
	{
		result = GameResult(count);//显式类型转换
		if (result == omit)
			cout << "比赛取消" << endl;
		else
		{
			cout << "比赛开始" << endl;
			if (result == WIN)
			{
				cout << "胜利" << endl;
			}
			if (result == LOSE)
			{
				cout << "失败" << endl;
			}
			if (result == TIE)
			{
				cout << "平局" << endl;
			}
		}
	}
	return 0;
}

【注意】
整型类型的数据可以和枚举类型的数据相互转换:
枚举类型数据可以隐含转换为整型数据;
整型数据转换为枚举类型数据则需要采用显式类型转换。
运行结果:
在这里插入图片描述

枚举类型的大小:

(1)枚举的大小是按照enum中元素最大值所占的内存大小来决定的,不像结构体那样有多少个元素就按各个元素所占字节叠加。
(2)当枚举成员的值小于4个字节时,占4个字节。
(3)当枚举成员的值大于4个字节时,最大只能是longlong类型,占8个字节。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

word怎么转换成pdf?分享几种转换方法

word怎么转换成pdf&#xff1f;将Word文档转换成PDF文件有几个好处。首先&#xff0c;PDF文件通常比Word文档更容易在不同设备和操作系统上查看和共享。其次&#xff0c;PDF文件通常比Word文档更难以修改&#xff0c;这使得它们在需要保护文件内容的情况下更加安全可靠。最后&a…

创建维基WIKI百科和建立百度百科有何不同?

很多企业有出口业务&#xff0c;想在互联网上开展全球性网络营销&#xff0c;维基百科往往被认为是开展海外营销的第一站。其作用相当于开展国内网络营销的百度百科&#xff0c;经常有些企业给小马识途营销顾问提供的词条内容就是百度百科的内容&#xff0c;可事实上两个平台的…

1227. 分巧克力(简单,易懂)

输入样例&#xff1a; 2 10 6 5 5 6输出样例&#xff1a; 2 这个题就是基础的二分问题&#xff0c;做题思路&#xff1a; 找到一个数&#xff0c;让其满足&#xff0c;所有小块的边值&#xff0c;且最终的总和要大于等于我们的K 第一次做错了&#xff01;&#xff01; #in…

云计算——虚拟化层架构

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 前言 本章将会讲解云计算的虚拟化层架构&#xff0c;了解云计算虚拟化层都有哪些架构模式…

Zotero ubuntu2023安装 关联 ubuntu文献翻译

一、准备下载的软件&#xff1a; Zotero | Downloads 1. Zotero-6.0.26_linux-x86_64.tar.bz2 下面是插件 zotfile-5.1.2-fx.xpi zotero-pdf-translate.xpi jasminum-v0.2.6.xpi 2.2.5 Tampermonkey 4.11.crx 所准备的文件&#xff0c;都已经在这个链接的压缩包下面 …

25.10 matlab里面的10中优化方法介绍—— 函数fmincon(matlab程序)

1.简述 关于非线性规划 非线性规划问题是指目标函数或者约束条件中包含非线性函数的规划问题。 前面我们学到的线性规划更多的是理想状况或者说只有在习题中&#xff0c;为了便于我们理解&#xff0c;引导我们进入规划模型的一种情况。相比之下&#xff0c;非线性规划会更加贴近…

代码随想录算法训练营第三十天 | 单调栈系列复习

单调栈系列复习 每日温度未看解答自己编写的青春版重点题解的代码日后再次复习重新写 下一个更大元素 I未看解答自己编写的青春版重点题解的代码日后再次复习重新写 下一个更大元素II未看解答自己编写的青春版重点题解的代码日后再次复习重新写 接雨水未看解答自己编写的青春版…

VUE使用docxtemplater导出word(带图片) 踩坑 表格循环空格 ,canvas.toDataURL图片失真模糊问题

参考&#xff1a;https://www.codetd.com/article/15219743 安装 // 安装 docxtemplater npm install docxtemplater pizzip --save // 安装 jszip-utils npm install jszip-utils --save // 安装 jszip npm install jszip --save // 安装 FileSaver npm install file-save…

深度学习实践——循环神经网络实践

系列实验 深度学习实践——卷积神经网络实践&#xff1a;裂缝识别 深度学习实践——循环神经网络实践 深度学习实践——模型部署优化实践 深度学习实践——模型推理优化练习 代码可见于&#xff1a; 深度学习实践——循环神经网络实践 0 概况1 架构实现1.1 RNN架构1.1.1 RNN架…

mac版窗口管理 Magnet for mac中文最新

magnet mac版是一款运行在苹果电脑上的一款优秀的窗口大小控制工具&#xff0c;拖拽窗口到屏幕边缘可以自动半屏&#xff0c;全屏或者四分之一屏幕&#xff0c;还可以设定快捷键完成分屏。这款专业的窗口管理工具当您每次将内容从一个应用移动到另一应用时&#xff0c;当您需要…

调整数组顺序使奇数位于偶数前面——剑指 Offer 21

文章目录 题目描述法一 两次遍历法二 双指针一次遍历法三 原地交换 题目描述 法一 两次遍历 class Solution{ public:vectro<int> exchange(vector<int>& nums){vector<int> res;for(auto & num : nums){if(num%21){res.push_back(num);}}for(auto &…

【宝藏系列】STM32之C语言基础知识

【宝藏系列】STM32之C语言基础知识 文章目录 【宝藏系列】STM32之C语言基础知识1️⃣位操作2️⃣define宏定义3️⃣ifdef条件编译4️⃣extern变量声明5️⃣typedef类型别名 C语言是单片机开发中的必备基础知识&#xff0c;本文列举了部分 STM32 学习中比较常见的一些C语言基础知…

Java代码连接RabbitMQ服务器

目录 1.添加依赖 2.生产者代码 3.消费者代码 4.效果 1.发送消息 2.消费消息 5.注意 1.添加依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.12.0</version></dependenc…

小研究 - 一种复杂微服务系统异常行为分析与定位算法(二)

针对极端学生化偏差&#xff08;&#xff25;&#xff58;&#xff54;&#xff52;&#xff45;&#xff4d;&#xff45; &#xff33;&#xff54;&#xff55;&#xff44;&#xff45;&#xff4e;&#xff54;&#xff49;&#xff5a;&#xff45;&#xff44; &#…

再下一城丨美格智能座舱模组获头部新势力正式定点

近日&#xff0c;美格智能与国内领先的Tier1厂商密切协作&#xff0c;基于美格车载智能模组打造的智能座舱解决方案&#xff0c;成功获得国内某头部造车新势力的座舱域控制器项目定点&#xff0c;为其打造下一代智能座舱解决方案&#xff0c;创造更加沉浸和智能的座舱体验。 据…

Spring Cloud Alibaba - Nacos源码分析(三)

目录 一、Nacos客户端服务订阅的事件机制 1、监听事件的注册 2、ServiceInfo处理 serviceInfoHolder.processServiceInfo 一、Nacos客户端服务订阅的事件机制 Nacos客户端订阅的核心流程&#xff1a;Nacos客户端通过一个定时任务&#xff0c;每6秒从注册中心获取实例列表&…

测试|测试用例方法篇

测试|测试用例方法篇 文章目录 测试|测试用例方法篇1.测试用例的基本要素&#xff1a;测试环境&#xff0c;操作步骤&#xff0c;测试数据&#xff0c;预期结果…2.测试用例带来的好处3.测试用例的设计思路&#xff0c;设计方法&#xff0c;具体设计方法之间的关系**设计测试用…

企业知识文档管理+群晖nas安全云存储

企业知识管理系统&#xff0c;利用软件系统或其他工具的企业管理方法&#xff0c;利用软件系统或其他工具&#xff0c;对组织中大量的有价值的方案、策划、成果、经验等知识进行分类存储和管理&#xff0c;积累知识资产避免流失&#xff0c;促进知识的学习、共享、培训、再利用…

深蓝学院C++基础与深度解析笔记 第13章 模板

1. 函数模板 ● 使用 template 关键字引入模板&#xff1a; template<typename T> //声明&#xff1a;T模板形参void fun(T); // T 函数形参template<typename T> //定义void fun(T) {...}– 函数模板不是函数 –…

指针进阶详解---C语言

❤博主CSDN:啊苏要学习 ▶专栏分类&#xff1a;C语言◀ C语言的学习&#xff0c;是为我们今后学习其它语言打好基础&#xff0c;C生万物&#xff01; 开始我们的C语言之旅吧&#xff01;✈ 目录 前言&#xff1a; 一.字符指针 二.指针数组 三.数组指针 四.数组、指针参数 …