当前位置: 首页 > news >正文

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)是一种用户自定义的数据类型,用于组织多个不同类型的数据成员。

  1. **定义:**结构体通过 struct 关键字进行定义,通常位于函数外部,可以包含多个数据成员,每个成员可以是任意类型的数据。
  2. **成员访问:**结构体的成员使用点操作符(.)进行访问,通过结构体变量的名字加上成员名来访问具体的成员。
  3. **默认访问权限:**C语言中的结构体成员默认是public的,可以在任何地方被访问。
  4. **没有成员函数:**在C语言中,结构体只能包含数据成员,不能包含成员函数。
  5. **无继承:**C语言中的结构体不能进行继承操作,即不能有父类和子类的概念。
  6. **没有构造函数和析构函数:**C语言中的结构体没有构造函数和析构函数的概念,结构体的初始化和清理工作通常由程序员手动完成。
(2)C++中的struct
  1. **定义:**结构体通过 struct 关键字进行定义,与C语言中的结构体类似,但在C++中,结构体可以包含成员函数、构造函数、析构函数等。
  2. **成员访问:**结构体的成员仍然可以使用点操作符(.)进行访问,但在C++中,可以使用 -> 操作符访问结构体指针的成员。
  3. **默认访问权限:**C++中的结构体成员默认是private的,可以使用访问修饰符(如publicprivateprotected)来控制成员的访问权限。
  4. **成员函数:**C++中的结构体可以包含成员函数,这意味着结构体不仅可以用来组织数据,还可以定义与数据相关的操作。
  5. **继承:**C++中的结构体可以被继承,可以有父类和子类的概念,可以使用继承和派生等面向对象的特性。
  6. **构造函数和析构函数:**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.普通枚举&#xff0c;枚举在C中使用比C使用简单 C语言: enum Color {red,green,blue }; enum Color c red;C语言 enum Color {red,green,blue }; Color c red;C认为这种枚举方式会污染名字&#xff0c;即&#xff1a;枚举使用的名字&#xff0c;在同一个作…...

【数据可视化】使用Python + Gephi,构建中医方剂关系网络图!

代码和示例数据下载 前言 在这篇文章中&#xff0c;我们将会可视化 《七版方剂学》 的药材的关系&#xff0c;我们将使用Python制作节点和边的数据&#xff0c;然后在Gephi中绘制出方剂的网络图。 Gephi是一个专门用于构建网络图的工具&#xff0c;只要你能提供节点和边的数…...

部署prometheus+Grafana可视化仪表盘监控服务

一、部署prometheus及监控仪表盘 简介 Prometheus是开源监控报警系统和时序列数据库(TSDB)。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控&#xff0c;输出被监控组件信息的HTTP接口被叫做expo…...

python中的类与对象

前言 在Python中&#xff0c;类是一种用于创建新类型对象的结构&#xff0c;它允许我们将数据和功能&#xff08;属性和方法&#xff09;封装到一个单独的逻辑单元中。类可以被看作是创建对象&#xff08;实例&#xff09;的蓝图或模板。类&#xff08;Class&#xff09;和对象…...

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 熊猫小账本&#xff0c;里面有用到这篇博客讲的内容 熊猫小账本 一个简洁的记账 App&#xff0c;用于…...

回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测&#xff08;完整源码和数据) …...

如何添加 Android Native 系统服务

如何添加 Android Native 系统服务 工作学习过程中&#xff0c;我们可能需要去阅读不同类型的 Native 系统服务&#xff0c;也有可能会自己去完成一个 Native 系统服务。无论哪种情况都需要我们了解基本的 Native 如何去添加。就像我们写 Android App 得先了解一下四大组件才行…...

【力扣】189.轮转数组

题目描述 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 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, 大家好&#xff0c;我是一代&#xff0c;今天给大家带来有关字符函数和字符串函数的有关知识 所属专栏&#xff1a;C语言 创作不易&#xff0c;望得到各位佬们的互三呦 一.字符函数 在C语言中有一些函数是专门为字符设计的&#xff0c;这些函数的使用都需要包含一个头文…...

【CKA模拟题】查询消耗CPU最多的Pod

题干 For this question, please set this context (In exam, diff cluster name) 对于此问题&#xff0c;请设置此上下文&#xff08;在考试中&#xff0c;diff 集群名称&#xff09; kubectl config use-context kubernetes-adminkubernetesFind the pod that consumes the …...

网络简略总结

目录 一、三次握手 四次挥手 1、三次握手:为了建立长链接进行交互即建立一个会话,使用http/https协议 2、四次挥手是一个断开连接释放服务器资源的过程 3、如果已经建立了连接,但是客户端突然出现故障了怎么办? 4、谁可以中断连接?客户端还是服务端还是都可以? 5、…...

如何处理错误情况

处理错误情况是确保自动窗帘系统稳定运行的重要一环。在编写代码时&#xff0c;你需要考虑可能发生的各种错误情况&#xff0c;并编写相应的错误处理代码。下面是一些处理错误情况的常见方法&#xff1a; (1)错误检测&#xff1a; 首先&#xff0c;你需要能够检测到错误的发生。…...

【Greenhills】MULTI IDE-GHS最新版本Compiler 23.5.4的兼容性问题

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 关于GHS推出的最新编译器版本 Compiler 2023.5.4在GHS以前版本的MULTI IDE上面能否使用的问题 2、 问题场景 针对于&#xff0c;客户使用MULTI IDE 8.1.4以前的IDE版本&#xff0c;想要搭载使用最新版本的编译器…...

用连续自然数之和来表达整数 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 一个整数可以由连续的自然数之和来表示。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。 输入描述 一个目标整数T (1 <=T<= 1000) 输出描述 该整数的所有表达式…...

SQLiteC/C++接口详细介绍之sqlite3类(十二)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十一&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十三&#xff09; ​37.sqlite3_load_extension 用于在SQLit…...

linux系统--------------mysql数据库管理

目录 一、SQL语句 1.1SQL语言分类 1.2查看数据库信息 1.3登录到你想登录的库 1.4查看数据库中的表信息 1.5显示数据表的结构&#xff08;字段&#xff09; 1.5.1数据表的结构 1.5.2常用的数据类型: 二、关系型数据库的四种语言 2.1DDL&#xff1a;数据定义语言&am…...

网络——入门基础

目录 协议 网络协议 OSI七层模型 网络传输基本流程 网络传输流程图 局域网通信 数据包的封装和解包 广域网通信 网络地址管理 IP地址 MAC地址 协议 关于什么是局域网&#xff0c;什么是广域网&#xff0c;我这里就不过多赘述了&#xff0c;我们直接来谈一下什么…...

二、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语言的&#xff0c;不是windows操作系统的&#xff0c;和PATH环境变量完全不同classpath环境变量是给classloader&#xff08;类加载器&#xff09;指路的java A 。执行后&#xff0c;先启动JVM&#xff0c; JVM启动classload…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...

OpenGL-什么是软OpenGL/软渲染/软光栅?

‌软OpenGL&#xff08;Software OpenGL&#xff09;‌或者软渲染指完全通过CPU模拟实现的OpenGL渲染方式&#xff08;包括几何处理、光栅化、着色等&#xff09;&#xff0c;不依赖GPU硬件加速。这种模式通常性能较低&#xff0c;但兼容性极强&#xff0c;常用于不支持硬件加速…...

MyBatis-Plus 常用条件构造方法

1.常用条件方法 方法 说明eq等于 ne不等于 <>gt大于 >ge大于等于 >lt小于 <le小于等于 <betweenBETWEEN 值1 AND 值2notBetweenNOT BETWEEN 值1 AND 值2likeLIKE %值%notLikeNOT LIKE %值%likeLeftLIKE %值likeRightLIKE 值%isNull字段 IS NULLisNotNull字段…...