C++ 中的 struct vs class:不是语法差异,而是工程语义的选择

很多刚学 C++ 的人,都会被一个问题卡住:

👉 struct 和 class 到底有什么区别?
👉 只是默认 public / private 不同吗?

如果只停在“默认权限不同”,那你永远用不好 C++。

真正重要的不是它们能干什么,而是你在表达什么设计意图

一、先给工程结论(一句话)

👉struct 更偏“数据容器 / 数据结构 / 模型载体”
👉class 更偏“对象抽象 / 行为封装 / 业务逻辑 / 模块边界”

不是能力差异,是语义分工

二、语法层面:它们几乎一模一样

在 C++ 中:

struct A { int x; void foo() {} }; class B { int x; void foo() {} };

从语言能力看:

  • 都可以有成员变量
  • 都可以有成员函数
  • 都可以有构造/析构
  • 都可以继承、多态、模板

👉class 能做的,struct 全都能做。

唯一硬性语法差异

1️⃣ 默认访问权限

struct A { int x; // 默认 public }; class B { int x; // 默认 private };

2️⃣ 默认继承方式

struct A : Base {}; // public 继承 class B : Base {}; // private 继承

👉 这就是书上常说的“唯一区别”,但这只是表象

三、为什么 C++ 要同时保留 struct 和 class?

因为 C++ 不是推翻 C,而是:

👉在 C 的内存模型之上,叠加对象模型。

C 语言里只有:

struct Point { int x; int y; };

C++ 选择:

  • 不废掉 struct
  • 而是“升级 struct”

于是:

👉 C 的 struct → C++ 的 struct(可以有函数、构造、多态)

struct 自然成为:

👉“偏数据、偏结构、偏内存模型”的类型入口

而 class 从一开始就是:

👉“偏对象、偏抽象、偏封装”的类型入口

四、真正的分界线:这是“数据”,还是“对象”?

4.1 struct 的典型定位

👉 数据结构
👉 参数对象
👉 DTO / VO
👉 协议包
👉 配置模型
👉 数学结构 / POD 类型

例子:

struct Point { float x; float y; }; struct UserInfo { int id; std::string name; };

特点:

  • 成员基本全 public
  • 很少复杂不变式
  • 职责是“承载数据”

👉 更像 JSON / 协议 / 结构体。

4.2 class 的典型定位

👉 业务对象
👉 模块抽象
👉 引擎组件
👉 管理器
👉 多态基类

例子:

class UserManager { public: void login(int id); void logout(int id); private: std::map<int, User> users_; };

特点:

  • 强封装

  • 明确职责

  • 维护状态合法性

  • 对外暴露行为而不是数据

👉 更像“对象”和“模块”。

五、工程设计准则(非常实用)

✅ 优先用 struct,当:

  • 这是一个“数据模型”
  • 成员天然就是 public
  • 用来传参 / 存储 / 组合
  • 没有复杂行为和约束

👉 目标是:直观、透明、可读。

✅ 优先用 class,当:

  • 这是一个“对象”
  • 需要封装实现
  • 需要保证不变式
  • 需要控制访问边界
  • 承担业务/模块职责

👉 目标是:抽象、隔离、可维护。

六、一个非常典型的工程对比例子

struct:数据载体

struct Config { int port; std::string host; };

👉 像配置文件 / 协议 / DTO。

class:对象抽象

class Server { public: explicit Server(const Config& cfg); void start(); void stop(); private: int port_; std::string host_; };

👉 像模块 / 服务 / 系统组件。

七、和不同语言的对齐理解

C 语言

只有 struct → 一切都是“数据结构”。

Java / Kotlin

只有 class → 一切都是“对象”。

C++

同时保留 struct 和 class:

👉 struct 负责“数据语义”
👉 class 负责“对象语义”

这正是 C++ 既能做系统,又能做框架的根本原因。

八、现代 C++ 中 struct 的真实地位

在现代 C++ 工程中:

  • 各种参数对象
  • STL 的 value_type
  • 协议模型
  • POD / trivial 类型
  • 算法输入输出结构

👉大量使用 struct。

而:

  • 引擎核心
  • 框架边界
  • 管理器
  • 多态体系

👉几乎清一色 class。

九、别再问“用 class 还是 struct”

真正该问的是:

👉“我在表达数据,还是在表达对象?”

  • 数据 → struct
  • 对象 → class

十、一句话总结全文

👉 struct 是“可升级的数据结构”
👉 class 是“完整的对象抽象单元”

语法几乎一样,工程语义完全不同。

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

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

相关文章

MiDaS实战指南:如何提升深度估计的准确性

MiDaS实战指南&#xff1a;如何提升深度估计的准确性 1. 引言&#xff1a;AI 单目深度估计的现实价值 在计算机视觉领域&#xff0c;从单张2D图像中恢复3D空间结构一直是极具挑战性的任务。传统方法依赖多视角几何或激光雷达等硬件设备&#xff0c;成本高且部署复杂。近年来&…

高性能中文NER服务上新|动态高亮+极速推理一键启动

高性能中文NER服务上新&#xff5c;动态高亮极速推理一键启动 1. 背景与需求&#xff1a;信息抽取在真实场景中的挑战 在当今信息爆炸的时代&#xff0c;非结构化文本数据&#xff08;如新闻、社交媒体、企业文档&#xff09;占据了数据总量的80%以上。如何从这些杂乱无章的文…

开发者友好型NER工具上线|支持API与Web双模式调用

开发者友好型NER工具上线&#xff5c;支持API与Web双模式调用 在自然语言处理&#xff08;NLP&#xff09;的实际应用中&#xff0c;命名实体识别&#xff08;Named Entity Recognition, NER&#xff09; 是信息抽取的核心任务之一。无论是新闻摘要、智能客服&#xff0c;还是…

零代码玩转AI分类:云端GPU可视化工具,鼠标拖拽就出结果

零代码玩转AI分类&#xff1a;云端GPU可视化工具&#xff0c;鼠标拖拽就出结果 1. 为什么市场专员需要AI分类工具 作为市场专员&#xff0c;你可能经常需要分析竞品数据、客户反馈或市场调研结果。传统方法需要手动整理Excel表格&#xff0c;用筛选和条件格式做简单分类&…

网络安全行业,真的吃证书!

网络安全证书有多重要&#xff1f;老A亲授&#xff1a;先拿敲门砖&#xff0c;再展真实力 | 程序员必看&#xff0c;建议收藏 网络安全行业高度重视证书&#xff0c;它们是HR快速评估能力的"刻度尺"。不同方向需考取对应证书&#xff1a;数据安全需CISP-DSG&#xf…

单目深度估计技术对比:MiDaS vs 传统方法

单目深度估计技术对比&#xff1a;MiDaS vs 传统方法 1. 引言&#xff1a;为何单目深度估计是3D感知的关键一步 在计算机视觉领域&#xff0c;从2D图像中恢复3D空间结构一直是核心挑战之一。传统的深度感知依赖双目立体视觉&#xff08;如Stereo Vision&#xff09;、结构光或…

基于STM32F051的BLDC直流无刷电机电调开发之旅

STM32F051 MK电调 BLDC 直流无刷电机控制 基于STM32F051 cortex-M0的电调开发板&#xff0c;包含原理图 PCB工程文件&#xff0c;程序源码&#xff0c;BLDC控制入门资料&#xff0c;供初学者入门学习了解。最近折腾了基于STM32F051 cortex - M0的电调开发板&#xff0c;感觉收…

边缘可部署的实时翻译方案|基于HY-MT1.5-1.8B模型实践解析

边缘可部署的实时翻译方案&#xff5c;基于HY-MT1.5-1.8B模型实践解析 在多语言交互日益频繁的智能终端时代&#xff0c;传统依赖云端API的翻译服务面临延迟高、隐私风险大、网络依赖性强等挑战。尤其在政务边疆、移动医疗、跨境物流等边缘场景中&#xff0c;亟需一种低延迟、…

20260112_161429_2025年十大网络安全事件盘点:数字风险已闯入寻常生活

【收藏必备】2025年网络安全事件全景回顾&#xff1a;从普通人到国家命脉的数字战场警示 文章回顾了2025年多起重大网络安全事件&#xff0c;包括快手直播自动化攻击、国家授时中心被渗透、企业勒索攻击等&#xff0c;展示了网络安全威胁的多样化与精准化趋势。这些事件影响了…

MiDaS小型模型部署:资源受限环境最优方案

MiDaS小型模型部署&#xff1a;资源受限环境最优方案 1. 引言&#xff1a;AI 单目深度估计的现实挑战 在边缘计算、嵌入式设备和低功耗场景中&#xff0c;如何实现高效、稳定的3D空间感知成为一大技术难题。传统深度估计依赖双目视觉或多传感器融合&#xff0c;硬件成本高、部…

多语言分类实战:XLM-RoBERTa云端部署指南

多语言分类实战&#xff1a;XLM-RoBERTa云端部署指南 引言 跨境电商平台经常面临多语言商品分类的挑战。当你的商品需要支持10种以上语言时&#xff0c;传统方法需要为每种语言单独训练模型&#xff0c;成本高且效率低。XLM-RoBERTa作为强大的多语言预训练模型&#xff0c;可…

零代码玩转AI分类:万能分类器镜像1块钱起试用

零代码玩转AI分类&#xff1a;万能分类器镜像1块钱起试用 引言&#xff1a;当市场专员遇到分类难题 上周市场部小王遇到了一个典型问题&#xff1a;领导要求48小时内完成3000条客户反馈的分类整理&#xff08;产品建议/售后问题/合作咨询&#xff09;。传统流程需要提交IT工单…

【Java毕设全套源码+文档】基于springboot的“图书森林”共享图书管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

别再问了!高校网络安全 36 个名词,一篇看懂不踩坑

在高校数字化转型加速的当下&#xff0c;校园网不再只是简单的上网通道&#xff0c;而是承载教学科研、学生管理、财务数据等核心信息的关键载体。随之而来的网络安全风险也愈发复杂&#xff0c;从黑客攻击、数据泄露到系统瘫痪&#xff0c;每一个隐患都可能影响高校正常运转。…

实战解析:1688详情api商品sku、主图数据

1688 商品详情 API 的 SKU 与主图数据&#xff0c;是大多数选品、铺货、比价系统首先要啃下的两块“硬骨头”。下面用一条完整的实战链路&#xff0c;把“拿到商品 ID → 拉出 SKU → 拖走主图”过程中最容易踩的坑、最实用的代码、以及返参里那些看似人畜无害却暗藏杀机的字段…

绕_WAF_实战:6_种_SQL_注入变形技巧!

收藏必备&#xff1a;6种绕过WAF的SQL注入技巧&#xff0c;小白也能轻松掌握 文章详解六种绕过WAF的SQL注入技巧&#xff1a;大小写变形、注释干扰、关键字拆分、编码转换、特殊字符替代和多语句嵌套。这些技巧利用WAF规则固定性与数据库语法灵活性之间的矛盾&#xff0c;应用…

Qwen3-VL-WEBUI镜像全解析|聚焦视觉编码增强与空间感知升级

Qwen3-VL-WEBUI镜像全解析&#xff5c;聚焦视觉编码增强与空间感知升级 在多模态大模型快速演进的今天&#xff0c;通义千问团队推出的 Qwen3-VL-WEBUI 镜像标志着国产视觉语言模型&#xff08;VLM&#xff09;进入了一个全新的阶段。该镜像基于阿里开源的 Qwen3-VL-4B-Instru…

分类模型持续学习:万能分类器在线更新+弹性GPU支持

分类模型持续学习&#xff1a;万能分类器在线更新弹性GPU支持 1. 引言&#xff1a;为什么需要持续学习的分类器&#xff1f; 想象一下你养了一只宠物狗&#xff0c;刚开始它只认识几种简单的指令&#xff08;坐下、握手&#xff09;。但随着时间推移&#xff0c;你希望它能理…

自动化监测如何省心?无线采集器+投入式水位计的黄金组合解析!​

一、水位计的概况 投入式水位计&#xff08;静压式水位计&#xff09;采用先进的隔离型扩散硅敏感元件制作而成&#xff0c;直接投入容器或水体中即可精确测量出水位计末端到水面的高度&#xff0c;并将水位值通过RS485信号对外输出。投入式水位计&#xff08;静压式水位计&…

分类模型微调实战:万能分类器+云端GPU 3小时出结果

分类模型微调实战&#xff1a;万能分类器云端GPU 3小时出结果 1. 为什么你需要万能分类器&#xff1f; 作为一名AI竞赛选手&#xff0c;你是否经常遇到这样的困境&#xff1a;本地单卡训练速度太慢&#xff0c;眼看着截止日期临近&#xff0c;模型性能却迟迟达不到理想状态&a…