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

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

http://www.jsqmd.com/news/311079/

相关文章:

  • C++ 结构体内存对齐终极指南:嵌套结构体如何“占位”?
  • 2026年快速拿证的威海手动挡驾校优质服务榜
  • 新手必读:STLink在Keil中的配置步骤详解
  • DeerFlow开源镜像:GitHub官方项目+火山引擎FaaS双渠道部署对比
  • SAM 3多模态提示实战:文本+点选协同提升小目标分割准确率
  • 基于SpringBoot+Vue的医药管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • STM32CubeMX安装包操作指南:零基础轻松掌握
  • 亲测Glyph视觉推理:让大模型‘看懂’长文本图像
  • translategemma-27b-it快速部署:Ubuntu/Windows/Mac三平台Ollama兼容方案
  • 【毕业设计】SpringBoot+Vue+MySQL 文理医院预约挂号系统平台源码+数据库+论文+部署文档
  • Z-Image Turbo在游戏开发预研中的应用:角色概念图快速迭代案例
  • 前后端分离工作流程管理系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • 基于SpringBoot+Vue的秒杀系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 企业级文理医院预约挂号系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 【毕业设计】SpringBoot+Vue+MySQL spring boot校园商铺管理系统平台源码+数据库+论文+部署文档
  • 科研人员新工具:gpt-oss-20b-WEBUI助力论文写作与分析
  • LLaVA-v1.6-7b快速部署:Ollama 0.3+版本对LLaVA 1.6的原生支持
  • YOLOv8展会人流分析:观众分布热力图生成实战
  • LightOnOCR-2-1B惊艳效果:中日韩混合排版PDF中汉字/平假名/片假名精准分离
  • GLM-4-9B-Chat-1M部署案例:高校AI实验室低成本搭建1M上下文教学实验平台
  • 如何用VibeThinker-1.5B解决LeetCode编程题?附完整流程
  • DASD-4B-Thinking科研辅助:用Long-CoT能力加速文献综述逻辑链构建教程
  • Git-RSCLIP开源可部署教程:科研团队私有遥感AI平台搭建
  • PasteMD生产部署:Nginx反向代理+HTTPS+Basic Auth的企业级安全接入方案
  • 显存22GB以内搞定Qwen2.5-7B微调,4090D实测真香
  • DCT-Net人像卡通化生产环境:Nginx反向代理+8080服务稳定部署
  • Flowise效果展示:Flowise构建的销售话术生成+客户画像分析流程
  • MinerU-1.2B镜像快速部署:无需CUDA,纯CPU环境实现企业级文档处理流水线
  • Keil4下载及安装常见问题与解决方案(STM32专用)
  • Qwen-Image-2512部署案例:中小企业低成本搭建自有AI视觉内容工厂