讲师中心 微信公众号
AI工具推荐 视频效率加速

C++中的struct和class有什么区别?(默认访问权限不同)

夏磊小哥_2364

夏磊小哥_2364

发布时间:2026-01-14 19:15:43

|

534人浏览过

|

来源于php中文网

原创

struct默认public,class默认private,且继承默认访问级别也不同;其余无本质区别,选择依据是语义意图与团队规范。

c++中的struct和class有什么区别?(默认访问权限不同)

struct 默认 public,class 默认 private,这是唯一本质区别。其他所谓“语义差异”或“习惯用法”都不影响编译器行为,纯属团队约定。

默认访问权限如何影响成员可见性

访问权限只控制「类内部定义的成员」在类外是否可直接访问,不改变继承行为本身:

  • struct 里声明的 int x; 等价于 public: int x;
  • class 里声明的 int x; 等价于 private: int x;
  • 显式写上 public:、private: 或 protected: 后,两者完全等效

继承时的默认访问级别也不同

这常被忽略,但和默认成员权限一样是语言硬性规定:

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载
  • struct B : A { }; → 等价于 struct B : public A { };
  • class B : A { }; → 等价于 class B : private A { };
  • 所以即使 A 是 struct,用 class 继承它默认仍是私有继承

实际编码中怎么选

选择依据不是语法能力,而是意图表达和团队规范:

立即学习“C++免费学习笔记(深入)”;

  • 只含 public 成员、无函数、无虚函数、无继承 —— 优先用 struct(如 Point、Config)
  • 需要封装、隐藏实现、提供接口契约 —— 用 class,哪怕你把所有成员都设为 public
  • 混用没问题,但别让 struct 出现 private: 块,会让人困惑
  • 模板参数常用 typename,但标准库里 std::tuple 内部用 struct 实现,说明编译器根本不care你用哪个
struct Vec2 {
    float x, y; // 自动 public
    Vec2(float x = 0, float y = 0) : x(x), y(y) {}
};

class Matrix {
    float data[16]; // 自动 private
public:
    void transpose();
};

真正容易出错的地方是:以为 struct 就不能有私有成员或虚函数 —— 它完全可以,只是默认不是而已;还有人误以为 class 不能做 POD 类型,其实只要满足条件(无虚函数、无非静态成员、无用户定义构造/析构等),class 也能是 POD。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5779

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2865

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

3608

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

2545

2025.08.29

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3088

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

4589

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3729

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

426

2026.01.19

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 包创建教程
Conan 包创建教程

共0课时 | 0人学习

Visual Studio 入门指南
Visual Studio 入门指南

共0课时 | 0人学习

CLion CMake 快速入门教程
CLion CMake 快速入门教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn