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…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...