c/c++--struct对比

目录

C++ struct的使用:

1.1 默认访问控制(Access Control):

1.2. 继承权限(Inheritance Access):

1.3. 构造函数、析构函数、成员函数:

2. 与c语言的对比

C语言中的区别:


在C/C++中,struct(结构体)和 class(类)都是用来创建自定义数据类型的关键字,但是也有许多不同之处

C++ struct的使用:

在复习之前,首先将struct的功能与class进行一下对比差异:

1.1 默认访问控制(Access Control)

struct成员默认是 public 的。也就是说,在结构体中声明的变量和方法是可以被外部代码直接访问的。

class成员默认是 private。也就是说,在类中声明的变量和方法默认只能在类的内部访问,外部代码无法直接访问。

struct MyStruct {int x; // 默认是 public
};class MyClass {int x; // 默认是 private
};

1.2. 继承权限(Inheritance Access)

struct:默认继承权限为 public。也就是说,继承自结构体时,基类的成员会是 public

class:默认继承权限为 private。也就是说,继承自类时,基类的成员会是 private

struct BaseStruct {int x;
};struct DerivedStruct : BaseStruct {  // 默认 public 继承void print() {std::cout << x << std::endl;  // 可以访问基类成员}
};class BaseClass {int x;
};class DerivedClass : BaseClass {  // 默认 private 继承void print() {// std::cout << x << std::endl;  // 编译错误,x 是 private}
};

1.3. 构造函数、析构函数、成员函数

  • struct:在C++中,structclass 都可以有构造函数、析构函数和成员函数。没有语言上的限制。
  • class:和 struct 一样,class 也支持构造函数、析构函数、成员函数。
struct MyStruct {int x;MyStruct(int val) : x(val) {} // 构造函数~MyStruct() {} // 析构函数void display() { std::cout << x << std::endl; } // 成员函数
};class MyClass {int x;
public:MyClass(int val) : x(val) {} // 构造函数~MyClass() {} // 析构函数void display() { std::cout << x << std::endl; } // 成员函数
};

2. 与c语言的对比

C语言中的区别

struct:在C语言中,struct 是唯一的方式来定义复合数据类型。C语言中没有 class 关键字,因此类的概念在C中是没有的。C语言中的 struct 可以包含成员变量,但不能包含方法(函数)。

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

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

相关文章

Linux7 线程(一)

线程 1. 概念2. 库函数线程库创建线程线程ID线程终止线程等待线程分离 3. 线程的互斥相关概念临界资源互斥量 - mutex初始化互斥量静态分配动态分配 销毁互斥量互斥量加锁互斥量解锁死锁概念死锁的四个必要条件避免死锁避免死锁算法 4. 线程的同步条件变量初始化条件变量静态分…

html的week控件 获取周(星期)的第一天(周一)和最后一天(周日)

html的week控件 获取周(星期)的第一天(周一)和最后一天(周日) <input type"week" id"week" class"my-css" value"ViewBag.DefaultWeek" /><script> function PageList() { var dateStrin…

MFC中Picture Control控件显示照片的几种方式

目前使用CImage和CBitmap两个类&#xff0c;还有是将CImage转CBitmap显示。 MFC界面拖拽一个button按钮和一个Picture Control控件。 1.CImage显示。这种方式显示图片会有颜色不对的情况 void Cpicture_test_controlDlg::OnBnClickedButton1() {// TODO: 在此添加控件通知处…

【拥抱AI】我们该如何集成大模型?

集成大模型到你的项目中涉及多个步骤&#xff0c;包括选择合适的模型、设置开发环境、调用模型的 API、处理响应数据等。本文将详细介绍如何集成大模型&#xff0c;并提供具体的示例代码和最佳实践。 1. 选择合适的模型 在集成大模型之前&#xff0c;首先需要选择一个合适的模…

github和Visual Studio

1、代码下载和提交 GitHubDesktopSetup-x64.exe 使用很简单&#xff0c;自己稍微琢磨下就明白了。 2、Visual Studio 2022 2.1 安装组件及学习内容 Visual Studio 中的 CMake 项目 | Microsoft Learn 2.2 打开 CMakeLists.txt 文件 定位并选择 CMakeLists.txt 文件 …

计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议

文章目录 一、TCP/IP五层模型&#xff08;重要&#xff09;二、应用层常见的协议三、TCP与UDP3.1 TCP、UDP的区别&#xff08;重要&#xff09;3.2 运行于TCP、UDP上的协议3.3 TCP的三次握手、四次挥手3.3.1 TCP的三次握手3.3.2 TCP的四次挥手3.3.3 随机生成序列号的原因 四、T…

vue 中读取docx文件中的文本

1. 引用t mammoth&#xff08;先install&#xff09; import mammoth from "mammoth"; 2.上传文件后&#xff0c;处理文件 getReferenceContent(result) {let text result.value;// 将解析出部分文本const number text.indexOf(xxx&#xff1a;");if(number…

Mybatis查询ORACLE数据库相近字段名称的值在映射出来的对象中被覆盖

背景 oracle数据库 oracle数据库中有一个表&#xff0c;一个字段的名叫做HEA_MUR&#xff0c;一个字段的名叫HEAMUR&#xff0c;两个字段都是字符串类型。 HEA_MURHEAMUR1001有点问题 java对象 在java对象中分别对应的字段如下&#xff1a; TableFile("HEA_MUR"…

达梦数据库迁移j脚本

国产环境使用达梦数据库的越来越多&#xff0c;除了使用管理工具&#xff0c;还是可以使用脚本。 下面简单记录下&#xff0c;我在迁移中遇到的问题&#xff1a; 备份脚本 使用此脚本可以一次备份一个数据 backup_one_db.sh #!/bin/bashexport DB$1 export PASS<your_p…

Go语言 HTTP 服务模糊测试教程

写在前面&#xff1a; 此博客内容已经同步到我的博客网站&#xff0c;如需要获得更优的阅读体验请前往https://blog.mainjay.cloudns.ch/blog/go/fuzzing-test 作为开发人员&#xff0c;我们并不总能预见到程序或函数可能接收到的所有可能输入。 即使我们可以定义主要的边界情…

学习笔记——PLCT汪辰:开发RISC-V上的操作系统(持续更新)

目录 第0章 下载源码 运行环境 构建和使用说明 第1章 记录一个本人没听说过的架构 第2章~第4章 第0章 下载源码 git clone https://gitee.com/unicornx/riscv-operating-system-mooc.git 运行环境 推荐使用 Ubuntu 20.04&#xff0c;Ubuntu 20.04 是目前最新的 Ubun…

Redis集群模式之Redis Sentinel vs. Redis Cluster

在分布式系统环境中&#xff0c;Redis以其高性能、低延迟和丰富的数据结构而广受青睐。随着数据量的增长和访问需求的增加&#xff0c;单一Redis实例往往难以满足高可用性和扩展性的要求。为此&#xff0c;Redis提供了两种主要的集群模式&#xff1a;Redis Sentinel和Redis Clu…

python opencv3

三、图像预处理2 1、图像滤波 为图像滤波通过滤波器得到另一个图像。也就是加深图像之间的间隙&#xff0c;增强视觉效果&#xff1b;也可以模糊化间隙&#xff0c;造成图像的噪点被抹平。 2、卷积核 在深度学习中&#xff0c;卷积核越大&#xff0c;看到的信息越多&#xff0…

JAVA后端生成图片滑块验证码 springboot+js完整案例

前言 现在大部分网部都是图片滑块验证码&#xff0c;这个得要与后端联动起来才是确保接口安全性 通过我们系统在发送手机短息时都会选进行滑块验证&#xff0c;但是我们要保证发送短息接口的全安&#xff0c;具体路思如下 那么这个滑块的必须是与后端交互才能保证安全性&…

【因果分析方法】MATLAB计算Liang-Kleeman信息流

【因果分析方法】MATLAB计算Liang-Kleeman信息流 1 Liang-Kleeman信息流2 MATLAB代码2.1 函数代码2.2 案例参考Liang-Kleeman 信息流(Liang-Kleeman Information Flow)是由 Liang 和 Kleeman 提出的基于信息论的因果分析方法。该方法用于量化变量之间的因果关系,通过计算信息…

6. ARM_ARM指令寻址

概念 什么是寻址方式&#xff1a; 寻址方式就是CPU去寻找一个操作数的方式。 ARM指令寻址的种类&#xff1a; ARM指令寻址有立即寻址、寄存器寻址、寄存器移位寻址、寄存器间接寻址、基址加变址寻址、等。 种类 1、立即寻址 立即寻址就是操作数直接包含在指令中&#…

在 Oracle Linux 8.9 上安装Oracle Database 23ai 23.5

在 Oracle Linux 8.9 上安装Oracle Database 23ai 23.5 1. 安装 Oracle Database 23ai2. 连接 Oracle Database 23c3. 重启启动后&#xff0c;手动启动数据库4. 重启启动后&#xff0c;手动启动 Listener5. 手动启动 Pluggable Database6. 自动启动 Pluggable Database7. 设置开…

【debug记录】MATLAB内置reshape与Python NumPy库reshape的差异

【debug记录】MATLAB内置reshape与Python NumPy库reshape的差异 背景函数原型MATLAB内置reshapeNumPy库reshape 差异分析解决方法 背景 最近在编程时遇到一个需求&#xff0c;需要将MATLAB工具箱中的函数用Python NumPy库进行实现&#xff0c;在对实现进行验证的过程中&#x…

Ubuntu23.10下解决C语言调用mysql.h问题

Ubuntu23.10下解决C语言调用mysql.h问题 导语环境准备问题和解决方案总结参考文献 导语 在学习C语言和MySQL的调用的时候遇到包和版本的问题&#xff0c;由于使用的书很老&#xff08;10年的&#xff09;&#xff0c;因此很多MySQL的包已经过时&#xff0c;在查找很多资料和询…

【JAVA毕业设计】基于Vue和SpringBoot的微服务在线教育系统

博主说明&#xff1a;本文项目编号 T 060 &#xff0c;文末自助获取源码 \color{red}{T060&#xff0c;文末自助获取源码} T060&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…