C/C++中枚举(enum)和结构体(struct)的异同
一、枚举 enum
1.普通枚举,枚举在C++中使用比C使用简单
C语言:
enum Color
{red,green,blue
};
enum Color c = red;
C++语言
enum Color
{red,green,blue
};
Color c = red;
C++认为这种枚举方式会污染名字,即:枚举使用的名字,在同一个作用域不能被变量使用
C++希望 red, green, blue……等枚举变量应该被限制在 Color 作用域里面。类比 struct,假设在 struct中定义了一个叫 Node 的结点变量,Node可以在struct 外部任何地方使用,而且外部也能定义 Node。但是枚举不行,在创建了一个枚举后,在整个作用域内,相同变量名不能被重新使用。
struct Student
{int id;char[20] name;
};
enum Person
{id,name,sex
};
struct Student stu;
stu.id = 20;
int id = 10;
// id这个变量名在 struct Student 作用范围内仍然可以使用,并且不影响 struct Student中的变量。enum Person per = name;
int name = 18; // 报错
// 在枚举中使用的变量名 name 不能被作用范围中其他变量定义使用!
2.C++范围枚举
(2)定义和使用
enum class 枚举名{成员.....
};Color c = Color::red;
(2)示例代码
#include <iostream>
using namespace std;// 普通枚举
enum Color
{red,green = 20,blue
};// 范围枚举
enum class Person
{name,sex = 44,age
};// 范围枚举
enum class Student
{name,sex = 21,age
};int main()
{cout << "普通枚举" << endl;Color c = green;cout << "c = " << c << endl;cout << "red = " << red << endl;cout << "blue = " << blue << endl;cout << "范围枚举" << endl;Person per = Person::sex;Student stu = Student::sex;cout << "输出 Person sex :" << (int)per << endl;cout << "输出Person sex :" << (int)stu;system("pause");return 0;
}
(3)在C++中使用枚举需要注意的事项
1.对于普通枚举,C++可以使用 枚举名 变量名 = 枚举成员eg: Color c = red;
C++可以使用这样的方式直接去定义变量,而不需要加上 enumeg: enum Color c = red; // 可以不用这样去定义变量2.对于普通枚举,C++/C可以直接使用 cout/printf 直接输出枚举变量的值eg: cout << c << endl;printf("%d\n",c);这里 会对 枚举变量进行隐式转换3.对于范围枚举,C++必须使用 :: 来获取枚举变量的值eg: Person per = Person::sex;使用 Person per = sex; // 会发生错误4.对于范围枚举,想要输出枚举变量的值,必须做强制类型转换eg: cout << "输出 Person sex :" << (int)per << endl;使用 cout << per << endl; // 会发生错误
二、结构体 Struct
C和C++的区别体现在结构体中
(1)C中的 struct
在C语言中,结构体(struct)是一种用户自定义的数据类型,用于组织多个不同类型的数据成员。
- **定义:**结构体通过
struct关键字进行定义,通常位于函数外部,可以包含多个数据成员,每个成员可以是任意类型的数据。 - **成员访问:**结构体的成员使用点操作符(
.)进行访问,通过结构体变量的名字加上成员名来访问具体的成员。 - **默认访问权限:**C语言中的结构体成员默认是
public的,可以在任何地方被访问。 - **没有成员函数:**在C语言中,结构体只能包含数据成员,不能包含成员函数。
- **无继承:**C语言中的结构体不能进行继承操作,即不能有父类和子类的概念。
- **没有构造函数和析构函数:**C语言中的结构体没有构造函数和析构函数的概念,结构体的初始化和清理工作通常由程序员手动完成。
(2)C++中的struct
- **定义:**结构体通过
struct关键字进行定义,与C语言中的结构体类似,但在C++中,结构体可以包含成员函数、构造函数、析构函数等。 - **成员访问:**结构体的成员仍然可以使用点操作符(
.)进行访问,但在C++中,可以使用->操作符访问结构体指针的成员。 - **默认访问权限:**C++中的结构体成员默认是
private的,可以使用访问修饰符(如public、private、protected)来控制成员的访问权限。 - **成员函数:**C++中的结构体可以包含成员函数,这意味着结构体不仅可以用来组织数据,还可以定义与数据相关的操作。
- **继承:**C++中的结构体可以被继承,可以有父类和子类的概念,可以使用继承和派生等面向对象的特性。
- **构造函数和析构函数:**C++中的结构体可以有构造函数和析构函数,用于对象的初始化和清理工作,可以通过构造函数进行初始化,析构函数进行资源的释放。
三个访问限定修饰符:public: 公开的,外界可以直接访问private: 私有的,外界不能直接访问,里面可以直接访问protected: 受保护的,外界不能直接访问,里面可以直接访问,它的儿子可以访问(这个设计是为了继承而来的,没有继承的时候不需要使用)当遇到访问限定修饰符后,接下来没有遇到下一个访问限定修饰符后,中间的所有内容都是按照这个访问限定修饰符的访问方式eg:class Student{public:int a;int b;private:};
a,b都是 public 的访问方式。struct 默认访问方式为 public 公有
class 默认访问方式为 private 私有
struct/class的基本使用语法,建议使用class
struct/class 类名
{默认的访问方式访问限定符:……访问限定符:……
};eg: 描述一个人
class Person
{char* name;int age;public:void Print_Name(); // 成员函数void Print_Age(){cout << age << endl;}// C++的封装// private 只能在类内访问// public 可以在类内 和 类外访问// protected 只能在类内访问,不能再 类外访问,它的儿子可以访问
};
相关文章:
C/C++中枚举(enum)和结构体(struct)的异同
一、枚举 enum 1.普通枚举,枚举在C中使用比C使用简单 C语言: enum Color {red,green,blue }; enum Color c red;C语言 enum Color {red,green,blue }; Color c red;C认为这种枚举方式会污染名字,即:枚举使用的名字,在同一个作…...
【数据可视化】使用Python + Gephi,构建中医方剂关系网络图!
代码和示例数据下载 前言 在这篇文章中,我们将会可视化 《七版方剂学》 的药材的关系,我们将使用Python制作节点和边的数据,然后在Gephi中绘制出方剂的网络图。 Gephi是一个专门用于构建网络图的工具,只要你能提供节点和边的数…...
部署prometheus+Grafana可视化仪表盘监控服务
一、部署prometheus及监控仪表盘 简介 Prometheus是开源监控报警系统和时序列数据库(TSDB)。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控,输出被监控组件信息的HTTP接口被叫做expo…...
python中的类与对象
前言 在Python中,类是一种用于创建新类型对象的结构,它允许我们将数据和功能(属性和方法)封装到一个单独的逻辑单元中。类可以被看作是创建对象(实例)的蓝图或模板。类(Class)和对象…...
sentry-cli - error: Failed to load .sentryclirc file from project path
Xcode 15.2 warning sentry-cli - error: Failed to load .sentryclirc file from project path (/Users/zhuhongwei/Desktop/pandabill/.sentryclirc)推荐一下刚上线的 App 熊猫小账本,里面有用到这篇博客讲的内容 熊猫小账本 一个简洁的记账 App,用于…...
回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测
回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测(完整源码和数据) …...
如何添加 Android Native 系统服务
如何添加 Android Native 系统服务 工作学习过程中,我们可能需要去阅读不同类型的 Native 系统服务,也有可能会自己去完成一个 Native 系统服务。无论哪种情况都需要我们了解基本的 Native 如何去添加。就像我们写 Android App 得先了解一下四大组件才行…...
【力扣】189.轮转数组
题目描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6…...
C语言字符函数和字符串函数详解
Hello, 大家好,我是一代,今天给大家带来有关字符函数和字符串函数的有关知识 所属专栏:C语言 创作不易,望得到各位佬们的互三呦 一.字符函数 在C语言中有一些函数是专门为字符设计的,这些函数的使用都需要包含一个头文…...
【CKA模拟题】查询消耗CPU最多的Pod
题干 For this question, please set this context (In exam, diff cluster name) 对于此问题,请设置此上下文(在考试中,diff 集群名称) kubectl config use-context kubernetes-adminkubernetesFind the pod that consumes the …...
网络简略总结
目录 一、三次握手 四次挥手 1、三次握手:为了建立长链接进行交互即建立一个会话,使用http/https协议 2、四次挥手是一个断开连接释放服务器资源的过程 3、如果已经建立了连接,但是客户端突然出现故障了怎么办? 4、谁可以中断连接?客户端还是服务端还是都可以? 5、…...
如何处理错误情况
处理错误情况是确保自动窗帘系统稳定运行的重要一环。在编写代码时,你需要考虑可能发生的各种错误情况,并编写相应的错误处理代码。下面是一些处理错误情况的常见方法: (1)错误检测: 首先,你需要能够检测到错误的发生。…...
【Greenhills】MULTI IDE-GHS最新版本Compiler 23.5.4的兼容性问题
【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 关于GHS推出的最新编译器版本 Compiler 2023.5.4在GHS以前版本的MULTI IDE上面能否使用的问题 2、 问题场景 针对于,客户使用MULTI IDE 8.1.4以前的IDE版本,想要搭载使用最新版本的编译器…...
用连续自然数之和来表达整数 - 华为OD统一考试(C卷)
OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 一个整数可以由连续的自然数之和来表示。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。 输入描述 一个目标整数T (1 <=T<= 1000) 输出描述 该整数的所有表达式…...
SQLiteC/C++接口详细介绍之sqlite3类(十二)
返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(十一) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(十三) 37.sqlite3_load_extension 用于在SQLit…...
linux系统--------------mysql数据库管理
目录 一、SQL语句 1.1SQL语言分类 1.2查看数据库信息 1.3登录到你想登录的库 1.4查看数据库中的表信息 1.5显示数据表的结构(字段) 1.5.1数据表的结构 1.5.2常用的数据类型: 二、关系型数据库的四种语言 2.1DDL:数据定义语言&am…...
网络——入门基础
目录 协议 网络协议 OSI七层模型 网络传输基本流程 网络传输流程图 局域网通信 数据包的封装和解包 广域网通信 网络地址管理 IP地址 MAC地址 协议 关于什么是局域网,什么是广域网,我这里就不过多赘述了,我们直接来谈一下什么…...
二、yocto 集成ros2(基于raspberrypi 4B)
yocto 集成ros2 yocto 集成ros21. 下载ros layer2. 编译集成ros3. 功能验证 yocto 集成ros2 本篇文章为基于raspberrypi 4B单板的yocto实战系列的第二篇文章。 一、yocto 编译raspberrypi 4B并启动 本节我们将ros2机器人操作系统移植到我们的yocto系统里面。 1. 下载ros laye…...
html--bug
文章目录 html html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>老师</title><style>body {background-color: #008000;margin: 0px;cursor: none;overflow: hidden;}</style></head><bod…...
Java基础学习笔记三
环境变量CLASSPATH classpath环境变量是隶属于java语言的,不是windows操作系统的,和PATH环境变量完全不同classpath环境变量是给classloader(类加载器)指路的java A 。执行后,先启动JVM, JVM启动classload…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
PydanticAI快速入门示例
参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...
