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

【C++】struct 和 class 的区别

        欢迎来到博主 Apeiron 的博客,祝您旅程愉快。时止则止,时行则行。动静不失其时,其道光明。


目录

1、缘起

2、示例代码

3、总结


1、缘起

在 C++ 中,struct 和 class 唯一的区别就在于 默认的访问权限不同。区别如下:

①  struct 默认权限为公共

②  class 默认权限为私有

2、示例代码

#include <iostream>using namespace std;class Person1
{string name;  //默认权限是私有权限
};struct Person2
{string name;  //默认权限是公共权限
};int main() 
{Person1 stu1;stu1.name = "胡图图";  //在 class 里默认权限为私有,因此类外不可以访问Person2 stu2;stu2.name = "胡图图";  //在 struct 默认的权限为公共,因此可以访问cout << endl;system("pause");return 0;
}

        从上图中可以看出,stu1 在访问 Person1 类中的成员变量 name 时,出现语法报错,这是因为在 class 里默认权限为私有,因此类外不可以访问。  

        stu2 在访问 Person2 结构体中的成员变量 name 时,访问正常,这是因为在 struct 里默认权限为公共,因此类外可以访问。

3、总结

        在 C++ 中,struct 和 class 是用于定义 自定义数据类型 的关键字。虽然它们在语法上非常相似,但它们之间存在一些重要的区别。

        当定义一个 struct 时,它默认是公共的(public)。这意味着结构体的成员变量和成员函数都可以直接访问,没有访问限制。通常情况下,结构体被用作简单的数据容器,主要用于存储和组织数据。相比之下,class 默认是私有的(private)。这意味着类的成员变量和成员函数默认情况下是不可直接访问的。如果需要访问类的成员,需要通过公共接口(public interface)来实现。类通常被用于实现更复杂的数据结构,其中数据和操作被封装在一起,隐藏了内部细节。

        另一个区别是继承方面。struct 默认情况下使用公共继承(public inheritance),这意味着基类中的公共成员在派生类中仍然是公共的。而 class 默认情况下使用私有继承(private inheritance),派生类无法访问基类的公共成员,除非通过公共接口。

        此外,还有一些编程习惯上的区别。在 C++ 中,struct 更倾向于简单的数据聚合,更接近于 C 语言的结构体。class 更倾向于实现面向对象的思想,包括封装、继承和多态。总之,struct 和class 在 C++ 中的主要区别在于默认访问权限、默认继承方式以及编程习惯上的使用。了解这些区别可以帮助开发者根据需求选择合适的关键字,以实现清晰、可维护的代码结构。

        本期的分享总结就到这里了,如果有疑问的小伙伴,我们在评论区交流嗷~~~,笔者必回,我们下期再见啦 !!

http://www.lryc.cn/news/92370.html

相关文章:

  • 活动笔记丨物业行业人效提升与灵活用工新路径
  • 学习笔记:吴恩达ChatGPT提示工程
  • POI in Action
  • 苹果Vision Pro将引爆人机交互的重大变革
  • MMDetection学习记录(二)之配置文件
  • Python数据分析:NumPy、Pandas和Matplotlib的使用和实践
  • 实习生面试问题及回答记录
  • 设计模式(十):结构型之外观模式
  • 买法拍房需要注意什么
  • linux命令输出结果但不显示在屏幕上的通用办法
  • 【Linux系统进阶详解】Linux字符权限rwx-权限组合原理,对应类型ugo,user,group,other,+-=详解及权限管理实战
  • 凡人修C传——专栏从凡人到成仙系列目录
  • 隐藏python代码,售卖并保护源代码
  • Material—— VAT(Houdini To UE)
  • 视频后期剪辑
  • Python3+Selenium2完整的自动化测试实现之旅(七):完整的轻量级自动化框架实现
  • 泰山信息科技5周年:无尽的感恩,非常非常的惋惜
  • LabVIEW编程开发PCB测试仪
  • React使用Electron开发桌面端
  • springboot+vue餐厅点餐系统在线点餐系统(含源码+数据库)
  • Vue.js 中的 TypeScript 支持是什么?如何使用 TypeScript?
  • 测试者必知—如何做Web测试?常见测试点总结
  • 怎么转换英文音频成文字?英文音频转文字app分享
  • esp32-cam拍照上传,app inventor 制作安卓app实时显示
  • 基于jsp+mysql+Spring+mybatis+Springboot的Springboot实现的就业信息管理平台
  • 阿里巴巴内部10w字Java面试小抄火了,完整版开放下载
  • Logback自定义DBAppender保存系统日志到数据库
  • 云原生之使用Docker部署LimeSurvey在线调查工具
  • sdbusplus:添加ObjectManager interface
  • “RAID0 vs RAID1 vs RAID5 vs RAID6 vs RAID10:哪种RAID级别最适合你的需求?“