什么是结构体?
结构体(structure,简称 struct)是一种用户自定义的数据类型,用于将多个不同类型的数据组合在一起。它允许在一个单一的单元中存储多个相关的数据项,使代码更具组织性和可读性。
结构体在编程中的应用场景
- 数据组织:将相关的数据组合,如学生信息、坐标点、日期等。
- 传递数据:在函数之间传递多个相关的数据项。
- 复杂数据处理:管理更复杂的数据结构,如链表、树、图等。
结构体的基本使用
定义和声明结构体
在 C++ 中,使用 struct
关键字定义一个结构体。基本语法如下:
1 | struct StructName { |
示例:定义一个学生结构体
1 | struct Student { |
创建结构体变量
定义结构体后,可以创建结构体类型的变量。
1 | Student student1; |
访问结构体成员
使用点运算符(.
)访问结构体成员。
1 | student1.id = 1001; |
结构体初始化
可以在创建结构体变量时进行初始化。
方法一:直观初始化
1 | Student student3 = {1002, "Bob", 92.0f}; |
方法二:逐个赋值
1 | Student student4; |
方法三:使用自定义构造函数
虽然结构体的主要用途是数据存储,但在 C++ 中,结构体可以像类一样拥有构造函数。
1 | struct Student { |
结构体与类的比较
在 C++ 中,struct
和 class
有很多相似之处,但也有一些关键区别。
类与结构体的相似之处
- 都可以包含成员变量和成员函数。
- 都支持访问控制(public、protected、private)。
- 都可以使用继承和多态。
类与结构体的区别
默认访问控制
- 结构体(struct):默认成员访问权限为
public
。 - 类(class):默认成员访问权限为
private
。
例子
1 | struct StructExample { |
用途习惯
- 结构体(struct):通常用于纯数据结构,主要存储数据,成员通常是公开的。
- 类(class):用于包含数据和操作数据的函数,支持更加复杂的封装。
实例比较
1 | struct Point { |
结构体的高级用法
嵌套结构体
结构体可以包含其他结构体作为成员。
示例:嵌套地址结构体
1 | struct Address { |
输出:
1 | Eve lives at 101 5th Avenue, New York |
结构体数组
可以创建包含多个结构体的数组,用于存储多个相同类型的数据项。
示例:存储多个学生信息的数组
1 | struct Student { |
输出:
1 | 学生ID: 1001, 姓名: Alice, 成绩: 89.5 |
结构体指针
可以创建指向结构体的指针,并通过指针访问结构体成员。
示例:使用结构体指针
1 | struct Car { |
输出:
1 | 品牌: Toyota |
使用 typedef
简化结构体定义
使用 typedef
(或 using
关键字)可以为结构体类型创建别名,使代码更简洁。
示例:使用 typedef
1 | typedef struct { |
应用:
1 | int main() { |
输出:
1 | 学生ID: 1004, 姓名: Daisy, 成绩: 95 |
5. 结构体中的函数
虽然结构体主要用于存储数据,但在 C++ 中,结构体也可以包含成员函数。这使得结构体更具面向对象的特性。
示例:在结构体中定义成员函数
1 |
|
输出:
1 | 书名: C++ Primer, 作者: Stanley B. Lippman, 页数: 976 |
使用结构体作为函数参数和返回值
传递结构体给函数
1 | struct Point { |
输出:
1 | Point(10, 20) |
从函数返回结构体
1 | struct Rectangle { |
输出:
1 | 矩形面积: 50 |
6. 示例项目
示例项目:简单学生信息管理系统
这个项目将结合前面的知识点,创建一个简单的学生信息管理系统,允许添加、显示和查找学生信息。
需求分析
- 添加新学生的信息(ID、姓名、成绩)
- 显示所有学生的信息
- 根据学生ID查找学生信息
代码实现
1 |
|
代码解析
- 结构体定义:定义了一个
Student
结构体,包含id
、name
和grade
,并有一个成员函数printInfo
来打印学生信息。 - 功能函数:
addStudent
:向学生列表中添加一个新的学生。displayStudents
:显示所有学生的信息。findStudentById
:根据学生ID查找并显示学生信息。
- 用户交互:使用
do-while
循环和switch-case
来处理用户的选择,实现添加、显示和查找学生信息的功能。
运行示例
1 | ===== 学生信息管理系统 ===== |