news 2026/5/2 0:16:20

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 结构体实战:从理论到游戏与业务场景

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

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


一、结构体基础语法

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

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

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

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

#include<iostream>usingnamespacestd;structMonster{intattack;// 攻击力(整数)intdefense;// 防御力(整数)floatdodgeRate;// 闪避率(0.0 ~ 1.0)floatcritRate;// 暴击率(0.0 ~ 1.0)};intmain(){Monster slime={50,30,0.2f,0.15f};cout<<"史莱姆属性:"<<endl;cout<<"攻击力: "<<slime.attack<<endl;cout<<"暴击率: "<<(slime.critRate*100)<<"%"<<endl;return0;}

优势

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

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

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

#include<iostream>#include<string>usingnamespacestd;structStudent{string name;// 姓名chargender;// 性别 ('M'/'F')intage;// 年龄string classNo;// 班级编号string major;// 专业};intmain(){Student s1={"张三",'M',20,"C++2401","计算机科学"};Student s2={"李四",'F',19,"C++2402","软件工程"};cout<<s1.name<<" | "<<s1.major<<endl;cout<<s2.name<<" | "<<s2.major<<endl;return0;}

优势

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

四、进阶建议

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

结论

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 14:14:42

C++ 结构体内存对齐终极指南:嵌套结构体如何“占位”?

在 C 开发中&#xff0c;尤其是涉及网络协议、硬件通信或高性能计算时&#xff0c;结构体的内存布局至关重要。你是否曾疑惑&#xff1a;为什么一个只包含 char 和 int 的结构体&#xff0c;sizeof 却是 8 而不是 5&#xff1f; 当结构体嵌套结构体时&#xff0c;内存是如何排布…

作者头像 李华
网站建设 2026/5/1 13:31:46

5个维度解析OR-Tools:从入门到解决资源调度问题

5个维度解析OR-Tools&#xff1a;从入门到解决资源调度问题 【免费下载链接】or-tools Googles Operations Research tools: 项目地址: https://gitcode.com/gh_mirrors/or/or-tools 你是否遇到过这些决策难题&#xff1f; 生产经理为订单排期焦头烂额&#xff0c;配送…

作者头像 李华
网站建设 2026/5/1 3:02:09

如何用VibeThinker-1.5B解决LeetCode编程题?附完整流程

如何用VibeThinker-1.5B解决LeetCode编程题&#xff1f;附完整流程 你是否试过在深夜刷LeetCode时卡在一道中等难度的动态规划题上&#xff0c;反复调试却始终无法通过全部测试用例&#xff1f;是否曾为一道需要多步数学推导的模拟题耗去两小时&#xff0c;最后发现只是边界条…

作者头像 李华
网站建设 2026/5/1 18:08:36

GLM-4-9B-Chat-1M部署案例:高校AI实验室低成本搭建1M上下文教学实验平台

GLM-4-9B-Chat-1M部署案例&#xff1a;高校AI实验室低成本搭建1M上下文教学实验平台 1. 项目背景与模型介绍 在高校AI实验室的教学与科研工作中&#xff0c;长文本理解与处理能力是许多研究课题的基础需求。传统的大模型部署方案往往面临两个痛点&#xff1a;一是长上下文支持…

作者头像 李华
网站建设 2026/5/1 9:16:23

LLaVA-v1.6-7b快速部署:Ollama 0.3+版本对LLaVA 1.6的原生支持

LLaVA-v1.6-7b快速部署&#xff1a;Ollama 0.3版本对LLaVA 1.6的原生支持 1. 认识LLaVA 1.6多模态模型 LLaVA&#xff08;Large Language and Vision Assistant&#xff09;是一个创新的多模态模型&#xff0c;它将视觉编码器与Vicuna语言模型相结合&#xff0c;实现了强大的…

作者头像 李华
网站建设 2026/5/1 12:18:09

DamoFD人脸检测实战:结合DeepFace进行表情识别预处理

DamoFD人脸检测实战&#xff1a;结合DeepFace进行表情识别预处理 你是不是也遇到过这样的问题&#xff1a;想做人脸表情分析&#xff0c;但第一步——把人脸从图片里准确框出来&#xff0c;就卡住了&#xff1f;要么漏检&#xff0c;要么框不准&#xff0c;关键点偏移&#xf…

作者头像 李华