在 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;
}
优势:
- 数据集中管理,避免散乱变量。
- 易于扩展(如添加
HP、MP)。- 可作为函数参数传递整个对象。
三、实战案例 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>)。- 便于序列化(存档、网络传输)。
四、进阶建议
- 嵌套结构体 :可将
Date(出生日期)作为Student的成员。 - 指定内存对齐 :在性能敏感场景(如网络包),可用
#pragma pack控制布局。 - 与类的区别 :若需封装行为(方法),应使用
class;若仅存储数据,struct更合适。
结论
结构体是 C++ 中"组合优于继承"思想的体现。无论是游戏中的角色、道具,还是业务系统中的订单、用户,结构体都能以最小开销、最高清晰度完成数据建模。
记住 :当你的数据需要"打包"时,就该用
struct。