C++ 结构体实战:从理论到游戏与业务场景

在 C++ 中,struct(结构体)是最基础也最实用的复合数据类型。它允许我们将多个不同类型的变量组合成一个逻辑单元,是构建复杂系统(如游戏对象、用户信息)的基石。

本文通过两个典型场景,带你掌握结构体的核心用法。


一、结构体基础语法

定义一个结构体非常简单:

cpp 复制代码
struct TypeName {
    type1 member1;
    type2 member2;
    // ...
};
  • 成员默认为 public(与 class 不同)。
  • 可使用 {} 初始化列表(C++11 起)。
  • 通过 . 访问成员;若为指针,则用 ->

二、实战案例 1:游戏开发------描述小怪兽

在游戏开发中,角色属性通常包含多种数据类型。结构体是组织这些数据的理想选择。

cpp 复制代码
#include <iostream>
using namespace std;

struct Monster {
    int attack;      // 攻击力(整数)
    int defense;     // 防御力(整数)
    float dodgeRate; // 闪避率(0.0 ~ 1.0)
    float critRate;  // 暴击率(0.0 ~ 1.0)
};

int main() {
    Monster slime = {50, 30, 0.2f, 0.15f};
    
    cout << "史莱姆属性:" << endl;
    cout << "攻击力: " << slime.attack << endl;
    cout << "暴击率: " << (slime.critRate * 100) << "%" << endl;
    return 0;
}

优势

  • 数据集中管理,避免散乱变量。
  • 易于扩展(如添加 HPMP)。
  • 可作为函数参数传递整个对象。

三、实战案例 2:业务系统------描述学员信息

在管理系统中,用户信息往往包含字符串、数字、枚举等混合类型。

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;

struct Student {
    string name;      // 姓名
    char gender;      // 性别 ('M'/'F')
    int age;          // 年龄
    string classNo;   // 班级编号
    string major;     // 专业
};

int main() {
    Student s1 = {"张三", 'M', 20, "C++2401", "计算机科学"};
    Student s2 = {"李四", 'F', 19, "C++2402", "软件工程"};

    cout << s1.name << " | " << s1.major << endl;
    cout << s2.name << " | " << s2.major << endl;
    return 0;
}

优势

  • 语义清晰,代码可读性高。
  • 支持数组或容器批量处理(如 vector<Student>)。
  • 便于序列化(存档、网络传输)。

四、进阶建议

  1. 嵌套结构体 :可将 Date(出生日期)作为 Student 的成员。
  2. 指定内存对齐 :在性能敏感场景(如网络包),可用 #pragma pack 控制布局。
  3. 与类的区别 :若需封装行为(方法),应使用 class;若仅存储数据,struct 更合适。

结论

结构体是 C++ 中"组合优于继承"思想的体现。无论是游戏中的角色、道具,还是业务系统中的订单、用户,结构体都能以最小开销、最高清晰度完成数据建模。

记住 :当你的数据需要"打包"时,就该用 struct

相关推荐
星辰_mya5 分钟前
Elasticsearch线上问题之慢查询
java·开发语言·jvm
Yu_Lijing6 分钟前
网络复习篇——网络基础(一)
网络·c++·笔记
前端小菜袅8 分钟前
PC端原样显示移动端页面方案
开发语言·前端·javascript·postcss·px-to-viewport·移动端适配pc端
Bella的成长园地8 分钟前
为什么c++中的条件变量的 wait() 函数需要配合while 循环或谓词?
c++·面试
Highcharts.js9 分钟前
如何使用Highcharts SVG渲染器?
开发语言·javascript·python·svg·highcharts·渲染器
charlee449 分钟前
为什么现代 C++ 库都用 PIMPL?一场关于封装、依赖与安全的演进
c++·智能指针·raii·pimpl·编译防火墙·封装设计
郝学胜-神的一滴14 分钟前
超越Spring的Summer(一): PackageScanner 类实现原理详解
java·服务器·开发语言·后端·spring·软件构建
摇滚侠15 分钟前
Java,举例说明,函数式接口,函数式接口实现类,通过匿名内部类实现函数式接口,通过 Lambda 表达式实现函数式接口,演变的过程
java·开发语言·python
阿里嘎多学长16 分钟前
2026-02-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Tony Bai17 分钟前
“Go 2,请不要发生!”:如果 Go 变成了“缝合怪”,你还会爱它吗?
开发语言·后端·golang