新闻中心

C++中struct和class有什么本质区别?(代码示例)

2025-12-16
浏览次数:
返回列表
本质区别只有一个:默认访问权限不同。struct默认public,成员无需显式声明即可被外部访问;class默认private,需显式声明public才能被外部访问。

c++中struct和class有什么本质区别?(代码示例)

本质区别只有一个:默认访问权限不同。

struct 默认是 public

定义 struct 时,成员(包括变量和函数)默认是 public 的,无需显式写 public: 就能被外部访问。

struct Point {
    int x, y;           // ← 默认 public
    void print() {      // ← 默认 public
        std::cout << "(" << x << "," << y << ")\n";
    }
};

int main() {
    Point p{1, 2};
    p.x = 10;     // ✅ 合法:x 是 public
    p.print();    // ✅ 合法:print() 是 public
}

class 默认是 private

定义 class 时,成员默认是 private 的,不加访问说明符就无法从外部直接访问。

class Point {
    int x, y;           // ← 默认 private
    void print() {      // ← 默认 private
        std::cout << "(" << x << "," << y << ")\n";
    }
};

int main() {
    Point p;
    p.x = 10;     // ❌ 错误:x 不可访问
    p.print();    // ❌ 错误:print() 不可访问
}

其他方面完全等价

除了默认访问权限,struct 和 class 在 C++ 中功能上没有区别:

晓象AI资讯阅读神器 晓象AI资讯阅读神器

晓象-AI时代的资讯阅读神器

晓象AI资讯阅读神器 72 查看详情 晓象AI资讯阅读神器
  • 都能定义成员变量、成员函数、构造函数、析构函数、运算符重载
  • 都能继承(单继承、多继承)、被继承、有虚函数、支持模板
  • 都能用 public: / protected: / private: 显式控制访问权限
  • 都可以作为模板参数,都可以有友元(friend)

比如给 class 加上 public:,它就和 struct 行为一致:

class Point {
public:                // ← 显式声明
    int x, y;
    void print() { std::cout << "(" << x << "," << y << ")\n"; }
};

习惯用法 ≠ 语言规则

虽然大家习惯用 struct 表示纯数据聚合(如坐标、配置项),用 class 表示封装逻辑的对象,但这只是约定,不是强制要求。

  • 你可以写一个带虚函数、私有成员、复杂构造的 struct
  • 也可以写一个只有 public 成员、无函数的 class
  • 编译器不关心你用哪个关键字,只看访问控制和语义是否合法

基本上就这些。记住:默认访问权限是唯一本质区别,其余全是风格和惯例。

以上就是C++中struct和class有什么本质区别?(代码示例)的详细内容,更多请关注其它相关文章!


# 修饰符  # 境外营销推广网站  # 泸州网站建设和优化服务  # 频繁营销推广犯法吗  # 崇文网站建设免费咨询  # 拼多多营销宣传推广方案  # 市场营销信息流推广  # 跨境整合营销推广方案设计  # 白云seo网站优化推广教程  # 推广小语种网站取名  # 合川网站建设工作推荐会  # c++  # 就能  # 你可以  # 什么用  # 尼克  # 只有一个  # 都能  # 运算符  # 访问权限  # 有什么  # 区别 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图  Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧  Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略  支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡  生成rdflib自定义SPARQL函数:参数匹配与实践指南  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】  Pyrogram与g4f集成:异步编程实践与常见错误解决  poki网页游戏推荐_poki免费游戏平台入口  一加 14R 快充无反应_一加 14R 充电优化  J*aScript中高效管理与清空动态列表:避免循环陷阱  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  ArrayList与LinkedList核心操作的Big-O复杂度分析  蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源  Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址  Yandex浏览器官方网页版入口 Yandex浏览器最新版官网  qq音乐在线播放入口_qq音乐电脑版登录链接  百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案  必由学网页版入口 必由学官方平台直接访问  J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案  Composer如何在生产环境安全地执行composer update  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】  Yandex免登录网页版地址 Yandex搜索引擎官方访问入口  J*aScript动态修改指定div内所有a标签样式指南  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  12306选座怎么选到特殊座位_12306特殊座位选择注意事项  cad如何更改注释性对象的比例_cad注释性比例调整方法  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  qq游戏大厅官方下载_qq游戏免费下载安装入口  Angular中单选按钮的正确使用与常见陷阱解析  Tabulator表格日期时间排序问题及自定义解决方案  荣耀Play7T运行卡顿解决_荣耀Play7T性能优化  将HTML Canvas内容转换为可上传的图像文件(File对象)  Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略  Excel Power Pivot如何处理XML数据源 构建高级数据模型  Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区  Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐  小米Civi 4录制视频过暗_小米Civi 4亮度优化  深入理解Go语言中的指针类型:以*string为例  html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】  NetBeans Ant项目:自动化将资源文件复制到dist目录的教程  React中useState与局部变量:理解组件状态管理与渲染机制  高德地图沿途添加点失败如何解决 高德多点规划方法 

搜索