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

C++面试6——类和结构体的区别和使用场景

C++类(class)和结构体(struct)的区别和使用场景


核心区别

  1. 默认访问权限(最关键区别)

    • 类 (class): 成员默认 private
    • 结构体 (struct): 成员默认 public
    class MyClass {int x;  // 默认 private,外部无法访问
    };struct MyStruct {int y;  // 默认 public,外部可直接访问
    };
    
  2. 默认继承权限

    • 类 (class): 继承默认 private
    • 结构体 (struct): 继承默认 public
    class Base {};
    class Derived : Base {}; // 等价于 private 继承struct BaseStruct {};
    struct DerivedStruct : BaseStruct {}; // 等价于 public 继承
    

何时用 class

  • 需要数据封装:隐藏内部状态,通过公共接口控制访问。

  • 需要复杂行为:包含成员函数、构造函数、虚函数等。

  • 实现面向对象特性:如多态、继承(尤其是私有/保护继承)。

  • 示例场景

    class BankAccount {
    private:double balance;  // 私有数据,外部不可直接修改
    public:void deposit(double amount) { /* 验证逻辑 */ }  // 安全操作接口virtual void display() const { /* 多态支持 */ }
    };
    

何时用 struct

  • 纯数据聚合:仅包含数据字段,无复杂行为。

  • 与C兼容:在C/C++混合编程中传递数据(确保无虚函数、无自定义构造/析构)。

  • 临时数据容器:如返回多个值的辅助结构。

  • 公开数据无风险:数据可直接读写,无需验证逻辑。

  • 示例场景

    struct Point {  // 仅需坐标数据int x; int y;
    };struct Config {  // 配置参数集合int width;int height;bool fullscreen;
    };
    

编码惯例(重要!)

  1. 语义约定

    • class 强调 封装行为(对象的核心抽象)。
    • struct 强调 数据聚合(被动数据结构)。
  2. 模板元编程

    template <typename T>
    struct TypeTraits {  // 元编程中常用 struct(默认公有)static const bool isPointer = false;
    };
    
  3. POD类型(Plain Old Data)

    • 若需兼容C或内存布局控制(如网络传输),用 struct 确保无虚函数/继承。

面试点睛

  • 不要死记硬背:强调设计意图(封装 vs 开放数据)。
  • 澄清误区:技术上 classstruct 几乎等价(仅默认权限不同),但约定不同。
  • 举例反问:如面试官问“是否能用 struct 替代 class?” 可答:
    “语法上可以,但会破坏封装性。若所有数据需公有,用 struct 更直观;否则应用 class 明确设计意图。”

总结表格

特性classstruct
默认访问权限privatepublic
默认继承权限privatepublic
典型用途封装对象、复杂行为数据聚合、简单容器
设计意图隐藏实现、提供接口公开数据、无操作逻辑

遵循这些原则,代码可读性和维护性会显著提升!

相关文章:

  • 做网站都需要什么qq引流推广软件哪个好
  • 个人做理财网站好上海广告推广
  • 网站建设验收内容海城seo网站排名优化推广
  • 免费1级做爰片观看网站在线视频公众号推广费用一般多少
  • 我要啦免费统计怎么做网站网络营销招聘
  • 视频网站建设 知乎seo公司资源
  • 零基础学习RabbitMQ(3)--核心概念
  • 打包上传到Linux部署并启动
  • C++ string类的操作
  • FFMPEG常用函数
  • 应用层协议 HTTP
  • 618风控战升级,瑞数信息“动态安全+AI”利剑出鞘
  • 无人机航电系统之语音通信技术篇
  • elk+filebeat收集springboot项目日志
  • 开疆智能CCLinkIE转ModbusTCP网关连接川崎机器人配置案例
  • 桥头守望者
  • WRF模式与Python融合技术在多领域中的应用及精美绘图;Python助力WRF自动化运行、WRF模式前后处理
  • Android Navigation 架构
  • 从虚拟机角度解释python3相对导入问题(下)
  • 创始人IP打造:知识付费领域破局的核心方法论
  • 服务器安装指南
  • PyEcharts教程(008):PyEchart仪表盘
  • PYTHON从入门到实践2-环境配置与字符串打印用法
  • ffmpeg环境配置
  • RDKit:药物化学和分子数据处理的强大工具库
  • 左神算法之单辅助栈排序算法