尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C++ 中 struct 与 class 的用法与区别

C++ 中 struct 与 class 的用法与区别
📅 发布时间:2026/6/20 8:14:11

C++ 中 struct 与 class 的用法与区别

Posted on 2025-11-20 22:06  steve.z  阅读(0)  评论(0)    收藏  举报

C++ 中 struct 与 class 的用法与区别

1. 概述

在 C++ 中,struct 与 class 都可以用来定义用户自定义类型(User-Defined Types)。
二者在语法能力上几乎完全相同,都可以:

  • 定义成员变量
  • 定义成员函数
  • 构造函数 / 析构函数
  • 访问修饰符(public / private / protected)
  • 继承、多态
  • 模板化

唯一真正的语法差异只有两点:默认访问权限与默认继承方式不同。


2. struct 与 class 的唯二语法差异

2.1 默认成员访问权限不同

类型 默认成员权限
struct public
class private

示例:

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

2.2 默认继承方式不同

继承类型 使用 struct 使用 class
默认继承方式 public private

示例:

struct Base {};
struct Derived1 : Base {};   // 默认 public 继承class Base2 {};
class Derived2 : Base2 {};   // 默认 private 继承

3. struct 与 class 其他方面完全一致

以下方面 struct 与 class 完全没有语法区别:

  • ✔ 可以定义成员函数
  • ✔ 可以定义构造/析构函数
  • ✔ 可以继承 / 多态
  • ✔ 可以模板化
  • ✔ 可以有 private/protected/public
  • ✔ 都可以作为面向对象编程的基本构件
  • ✔ 都可以用于封装数据与行为

示例:struct 一样可以有复杂行为:

struct Foo {Foo() {}void run() {}
private:int data;
};

而 class 一样可以是纯数据载体:

class Point {
public:int x;int y;
};

4. 使用上的习惯(行业广泛遵循)

虽然语法等价,但开发中通常遵循以下约定:


4.1 struct 用于“数据结构”

特点:

  • 成员默认 public,更适合公开的数据载体

  • 更倾向于作为 POD(Plain Old Data)

  • 常用于:

    • 函数返回结构体
    • 配置参数
    • 轻量数据结构

示例:

struct Vec3 {float x, y, z;
};

4.2 class 用于“面向对象的封装”

特点:

  • 成员多数为 private

  • 强调封装性与行为逻辑

  • 常用于:

    • 对象抽象(Student、Car 等)
    • 封装复杂行为
    • 多态体系

示例:

class Student {
public:void study();
private:std::string name;int age;
};

5. 使用注意事项

5.1 注意默认继承方式导致的 BUG

class Base {};
class Derived : Base {}; // 默认 private,会导致基类成员不可访问

若你期望 public 继承,一定要写:

class Derived : public Base {};

5.2 使用 struct + private 容易造成误解

虽然合法,但不符合常规阅读习惯:

struct Foo {
private:int x;  // 不推荐:struct+private 容易误导读者
};

5.3 struct 并不等于 POD(Plain Old Data)

POD 是否成立取决于类型特征,与是否为 struct/class 无关。


5.4 C 的 struct ≠ C++ 的 struct

C 语言的 struct:

  • 不能有成员函数
  • 不能有访问修饰符
  • 不能继承

C++ 中 struct 和 class 完全等价,只是默认权限不同。


6. 示例代码总结

struct(适合“数据结构”)

struct PersonInfo {std::string name;int age;double height;
};

class(适合“封装对象”)

class Person {
public:Person(std::string name, int age) : name(name), age(age) {}void introduce();
private:std::string name;int age;
};

7. 总结(面试高频答案)

C++ 中 struct 与 class 的唯二区别是:

  1. 默认成员权限不同:struct 默认 public,class 默认 private。
  2. 默认继承方式不同:struct 默认 public 继承,class 默认 private 继承。

除此之外二者完全一致。
struct 多用于数据载体,class 多用于封装对象行为,这是编码习惯而非语法规定。

相关新闻

  • 07.创建型 - 抽象工厂模式(Abstract Factory Pattern)
  • 模型量化原理
  • 日总结 29

最新新闻

  • 深入解析CAN控制器:从寄存器位到消息调度与滤波机制
  • Siri要接入AI了,苹果手机上一句话让GPT写文案、DeepSeek写代码的时刻来了
  • 从M68HC11E实战解析8位MCU架构:寄存器、外设与低功耗设计
  • 深入解析LPC408x/7x外设与电源管理:从原理到低功耗实战
  • 重庆黄金回收避坑2026|多数用户遇压价 无资质回收需谨慎 - 名奢变现站
  • 大师兄小论文剖析

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号