- struct 数据结构(也叫结构体)是什么?它的使用场景?
- 结构体的定义语法
- 结构体作为函数形参和返回值的应用
- 用动态数组管理结构体数据
- C++ 结构体支持构造函数、析构函数和结构体函数
struct 结构体就是用 struct 修饰,将一个或多个数据类型包含在一个结构里面,方便使用和管理
现实应用场景中,很多的物体的描述都需要多个数据类型组合到一起来表示,如一个人会有名称、性别、年龄、身高等;一台正在销售空调会有品牌名称、型号、产地、匹数、价格等等;这个时候就可以用到 struct 结构体来表示;
结构体定义语法:
struct struct_name {
member_type1 member_name1;
member_type2 member_name2;
...
member_typeN member_nameN;
};
- // 结构体声明(可选)
- struct BillInfo;
-
- // 结构体定义例子:帐单信息
- struct BillInfo {
- int m_billId{ 0 }; // 帐单编号
- char m_account[260]{}; // 客户名称
- float m_amount{ 0.0 }; // 帐单金额
- };
-
-
- BillInfo billInfo; // 定义结构体对象
- billInfo.m_billId = 1; // 给结构体对象成员变量赋值
- strcpy(billInfo.m_account, "User1"); // 给结构体对象成员变量赋值
- billInfo.m_amount = 230.50; // 给结构体对象成员变量赋值
-
- const float f = billInfo.m_amount; // 访问结构体对象成员变量
- std::cout << "amount:" << f << std::endl;
- // 结构体做为函数参数例子:
- void add_bill_info(const BillInfo& billInfo)
- {
- std::cout << "billId : " << billInfo.m_billId << std::endl;
- }
-
- // 生成 100 个结构体数据
- BillInfo billInfo;
- for (int id = 1; id <= 100; ++id) {
- billInfo.m_billId = id;
- sprintf(billInfo.m_account, "User%d", id);
- billInfo.m_amount = 230.50;
- add_bill_info(billInfo); // 调用函数,传递结构体形参
- }
- // 根据 billId 获取结构体数据
- BillInfo get_bill_info(int billId)
- {
- BillInfo billInfo;
- billInfo.m_billId = billId;
- // ...
- return billInfo;
- }
-
- for (int id = 1; id <= 10; ++id) {
- BillInfo billInfo = get_bill_info(id);
- // 获取结构体数据
- std::cout << "billId : " << billInfo.m_billId << std::endl;
- }
- #include
-
- std::vector
billInfoList; // 帐单列表 -
- void set_bill_infos(const std::vector
& billInfoList) - {
- for (const auto & billInfo : billInfoList) {
- // 访问数组结构体成员
- const int billId = billInfo.m_billId;
- std::cout << i << " billId : " << billId << std::endl;
- }
- // ...
-
- }
-
- for (int i = 0; i < 100; i++) {
- // 构造结构体数据
- const int id = i + 1;
- BillInfo billInfo;
- billInfo.m_billId = id;
- sprintf(billInfo.m_account, "User%d", id);
- billInfo.m_amount = 230.50;
- // 放入数组
- billInfoList.push_back(billInfo);
- }
- // 把结构体数组放入函数形参
- set_bill_infos(billInfoList);
- typedef struct AccountInfo
- {
- ...
- }ACCOUNT_INFO;
-
- ACCOUNT_INFO account1;
C++ 结构体支持构造函数、析构函数,和普通结构体函数
构造函数、析构函数详细内容,在下一节【class 类(上)】课程进行讲解
结构体函数例子:
- // 普通结构体函数例子
- struct AccountInfo {
- // 帐号和密码登录验证
- bool login(const std::string& account, const std::string& password) const {
- return m_account == account && m_password == password;
- }
- // 结构体成员变量
- std::string m_account;
- std::string m_password;
- };
- 完善上一课程的练习,用 struct 结构体来定义用户信息,除了用户名称,再增加用户编号、性别、年龄等信息;同时用 std::vector 动态数组来管理用户列表;实现以下相同指令功能:
- "add" : 新建一个用户;用户编号自增长,用户名称提示用户输入
- "delete" : 删除一个用户;提示用户输入要删除的用户编号
- "list" : 列出所有用户信息(包括用户编号、用户名称等)
- "quit" : 退出程序
进入视频号学习本文配套视频课程。
-【End】-
哈喽,大家好!我是喜欢coding的小二,一枚“靓仔又不掉头发”的C++开发大头兵;欢迎围观公众号(20YC编程),定期会分享一些技术开发经验、行业资讯、业界动态等。期待您的关注,一起交流学习进步。
#下载示例源码和开发工具,请进入公众号首页,点击(发消息)最下方的(资源下载)菜单即可获取。
喜欢本文章,记得点赞、分享、关注哦~