C++ 自定义数据类型

news2024/9/22 23:22:04

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个字节。

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

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

相关文章

《MySQL》第十三篇 SELECT * 和 SELECT 字段名的区别

在实际开发中&#xff0c;进行数据查询的SQL无非有两种写法&#xff0c;使用SELECT * from tableName或者SELECT 字段名(多个) from tableName&#xff0c;二者各有利弊 SELECT * 写法 优点&#xff1a; 写法简单&#xff0c;不需要手动输入具体的字段&#xff0c;一定程度上…

【【萌新的stm32学习-2】】

萌新的stm32学习-2 STM32 启动模式 可以通过BOOT0和BOOT1 引脚设置启动模式 BOOT1 BOOT0 X 0 启动模式 主闪存存储器 0 1 系统存储器 1 1 选择 内置SRAM&#xff08;少&#xff09; 我们使用串口给 STM32 下载程序&#xff0c;但是串口下载并不能仿真调试代码&#xff0c;只…

程序员做项目必用的工具【更新中...】

每个程序员多多少少都会有自己简化项目的小工具&#xff0c;我采访了我们公司所有的工程师总结了程序员必备工具篇。 一.unisms 官网&#xff1a;https://unisms.apistd.com/ 不会有人这年头写注册登录还是自己写验证码模块吧&#xff1f; 你该得拥有一个短信验证码平台了&…

【雕爷学编程】MicroPython动手做(24)——掌控板之拓展掌控宝2

掌控拓展板(parrot)是掌控板衍生的一款体积小巧、易于携带的拓展板。支持电机驱动、语音播放、语音合成等功能的IO引脚扩展板,可扩展12路IO接口和2路I2C接口。 技术参数 该板具有以下特性: 两路DC马达驱动,单路电流150mA 支持音频功放和喇叭输出(掌控板P8&#xff0c;P9引脚…

不可错过的家装服务预约小程序商城开发指南

在当今社会&#xff0c;家装行业发展迅速&#xff0c;越来越多的人开始寻求专业的家装预约和咨询服务。对于不懂技术的新手来说&#xff0c;创建一个自己的家装预约咨询平台可能听起来很困难&#xff0c;但实际上通过一些第三方制作平台和工具&#xff0c;这个过程可以变得简单…

网络安全学习笔记——burp和SqlMap的tips

一、Burp 爆破 1、Burp爆账号密码 burp爆破的前提条件——该网站账号密码没有进行加密而是明文&#xff0c;且验证码可以重复使用&#xff0c;如下图数据包中直接显示账号与密码且验证码不需要重复提交&#xff08;此处需要自己使用burp进行测试&#xff09; 1、进入burp&am…

生态伙伴 | 华秋硬创联合长虹创投,共同打造更优生态系统

01大赛介绍 中国硬件创新创客大赛始于2015年&#xff0c;由深圳华秋电子有限公司主办&#xff0c;至今已经成功举办八届&#xff0c;赛事范围覆盖华南、华东、华北三大地区&#xff0c;超10个省市区域。 大赛影响了超过45万工程师群体&#xff0c;吸引了35000多名硬创先锋报名参…

Android 之 TelephonyManager (电话管理器)

本节引言&#xff1a; 本章节是Android基础入门教程的最后一章&#xff0c;主要讲解是一些零零散散的一些知识点&#xff0c;以及一些遗漏 知识点的补充&#xff0c;这些零散的知识点包括&#xff0c;各种系统服务的使用&#xff0c;比如本节的电话管理器&#xff0c;短信管理器…

ALLEGRO之Place

本文主要讲述了ALLEGRO的Place菜单。 &#xff08;1&#xff09;Manually&#xff1a;手动放置&#xff0c;常用元器件放置方法&#xff1b; &#xff08;2&#xff09;Quickplace&#xff1a;快速放置&#xff1b; &#xff08;3&#xff09;Autoplace&#xff1a;自动放置&a…

ARM裸机-9

1、ARM汇编指令集 1.1、两个概念&#xff1a;指令与伪指令 (汇编) 指令是CPU机器指令的助记符&#xff0c;经过编译后会得到一串10组成的机器码&#xff0c;可以由CPU读取执行。 (汇编)伪指令本质上不是指令 (只是和指令一起写在代码中)&#xff0c;它是编译器环境提供的&…

最新版CleanMyMac X4.14.1苹果电脑系统数据清理工具

最新版CleanMyMac X 让您的Mac焕然一新&#xff0c;时刻保持安全CleanMyMac X是一款专业的Mac清理软件&#xff0c;可智能清理mac磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软件&#xff…

【Git系列】了解什么是版本控制

&#x1f433;了解什么是版本控制 &#x1f9ca;1. 什么是版本控制&#x1f9ca;2. 为什么要有版本控制&#x1f9ca;3. 常见的版本控制工具&#x1f9ca;4. 版本控制分类&#x1fa9f;4.1 本地版本控制&#x1fa9f;4.2 集中版本控制&#x1fa9f;4.3 分布式版本控制 学习git之…

socket 基础

Socket是什么呢&#xff1f; ① Socket通常也称作“套接字”&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。 ② Socket是连接运行在网络上的两个程序间的双向通信的端点。 ③ 网络通讯其实指…

1.1.2 SpringCloud 版本问题

目录 版本标识 版本类型 查看对应版本 版本兼容的权威——官网&#xff1a; 具体的版本匹配支持信息可以查看 总结 在将Spring Cloud集成到Spring Boot项目中时&#xff0c;确保选择正确的Spring Cloud版本和兼容性是非常重要的。由于Spring Cloud存在多个版本&#xff0c;因此…

Vulnhub: shenron: 3靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.171 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.171 修改hosts后访问目标80端口&#xff0c;发现是wordpress wpscan收集目标用户&#xff0c;爆破出密码&#xff1a;ilov…

台灯头灯手电筒UL153亚马逊美国站测试要求

在将台灯、头灯或手电筒上架到亚马逊美国站之前&#xff0c;UL153测试是必不可少的一项认证。UL153是美国安全实验室&#xff08;Underwriters Laboratories&#xff09;颁布的一项标准&#xff0c;旨在确保产品的安全性和可靠性。那么&#xff0c;我们应该如何办理UL153测试报…

亚马逊调整数据存档政策:超两年的订单将从9月起存档!

2023年9月起&#xff0c;亚马逊美国站和欧洲站宣布对订单数据存档政策进行调整。该调整意味着自2023年9月起&#xff0c;所有历时两年以上的订单将按月存档。此举是为了确保客户的个人隐私和数据安全&#xff0c;存档订单将不再包含买家的个人身份信息&#xff0c;如姓名、电话…

git操作:修改本地的地址

Windows下git如何修改本地默认下载仓库地址 - 简书 (jianshu.com) 详细解释&#xff1a; 打开终端拉取git时&#xff0c;会默认在git安装的地方&#xff0c;也就是终端前面的地址。 需要将代码 拉取到D盘的话&#xff0c;现在D盘创建好需要安放代码的文件夹&#xff0c;然后…

Linux系统管理:虚拟机Rocky Linux安装

目录 一、理论 1.Rocky Linux 2.NetworkManager配置 3.ipaddress 配置文件 4.nmtui 配置 ipaddress 二、实验 1.虚拟机Rocky Linux安装准备阶段 2.安装Rocky Linux 3.进入系统 三、问题 1.网络配置文件权限不够 一、理论 1.Rocky Linux &#xff08;1&#xff0…

《2023数字化采购发展报告》发布,北京筑龙采购供应链数字化实践成功入选

近日&#xff0c;由亿邦智库联合中国物流采购与联合会公共采购分会共同编制的《2023数字化采购发展报告》&#xff08;下文称《报告》&#xff09;在第四届国有企业数智化采购与智慧供应链高峰论坛上重磅发布。作为一家服务30行业超大型及大中型国有企业的采购供应链数字化产品…