1 本课主要内容:
- struct 数据结构(也叫结构体)是什么?它的使用场景?
- 结构体的定义语法
- 结构体作为函数形参和返回值的应用
- 用动态数组管理结构体数据
- C++ 结构体支持构造函数、析构函数和结构体函数
2 主要知识点:
-
struct 结构体是什么?
struct 结构体就是用 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;
}
-
利用 vector 动态数组管理结构体数据
#include <vector>
std::vector<BillInfo> billInfoList; // 帐单列表
void set_bill_infos(const std::vector<BillInfo>& 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 定义结构体别名
typedef struct AccountInfo
{
...
}ACCOUNT_INFO;
ACCOUNT_INFO account1;
-
C++ 结构体的函数
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;
};
3 课后练习:
- 完善上一课程的练习,用 struct 结构体来定义用户信息,除了用户名称,再增加用户编号、性别、年龄等信息;同时用 std::vector 动态数组来管理用户列表;实现以下相同指令功能:
- "add" : 新建一个用户;用户编号自增长,用户名称提示用户输入
- "delete" : 删除一个用户;提示用户输入要删除的用户编号
- "list" : 列出所有用户信息(包括用户编号、用户名称等)
- "quit" : 退出程序
附录:在线视频课程
进入视频号学习本文配套视频课程。
-【End】-
哈喽,大家好!我是喜欢coding的小二,一枚“靓仔又不掉头发”的C++开发大头兵;欢迎围观公众号(20YC编程),定期会分享一些技术开发经验、行业资讯、业界动态等。期待您的关注,一起交流学习进步。
#下载示例源码和开发工具,请进入公众号首页,点击(发消息)最下方的(资源下载)菜单即可获取。
喜欢本文章,记得点赞、分享、关注哦~