结构体 (struct):将数据打包成有意义的整体
-
结构体就是一种自定义的数据类型,它允许你将不同类型的数据组合在一起,形成一个有意义的新的数据
-
定义结构体:设计你的数据“包裹”
struct Student { std::string name; // 学生姓名 int id; // 学生学号 float score; // 学生成绩 };struct关键字表明我们正在定义一个结构体。Student是这个结构体的名称,你可以根据需要自定义名称,但要遵循命名规范,使其具有描述性。
-
使用结构体:创建和访问结构体变量
#include <iostream> #include <string> struct Student { std::string name; int id; float score; }; int main() { // 声明一个 Student 类型的变量 s1 Student s1; // 为 s1 的成员赋值 s1.name = "Alice"; s1.id = 2023001; s1.score = 95.5; // 访问并输出 s1 的成员 std::cout << "姓名: " << s1.name << std::endl; std::cout << "学号: " << s1.id << std::endl; std::cout << "成绩: " << s1.score << std::endl; return 0; }- 要使用结构体,首先需要声明结构体类型的变量,就像声明
int或float类型的变量一样。 - 使用点运算符
.来访问结构体变量的成员。例如,s1.name表示访问s1这个Student结构体变量的name成员。
- 要使用结构体,首先需要声明结构体类型的变量,就像声明
-
C++ 中的
struct与 C 语言中的struct的主要区别- 成员函数:
- C++ 中:
struct不仅可以包含数据成员,还可以包含函数(称为成员函数或方法) - C 中:
struct只能包含数据成员。
- C++ 中:
- 默认访问权限:
- 共同: C++与C 中
struct的默认成员访问默认权限都是是public。 - C++ 的
struct同样可以使用public、private和protected关键字来显式控制成员的访问权限,class更常用于实现具有私有成员的抽象数据类型。
- 共同: C++与C 中
- 成员函数:
-
struct和class的异同- 功能上几乎完全相同
- 它们都可以包含数据成员和成员函数,并且都支持继承、多态等面向对象编程的特性。
- 核心区别在于默认的成员访问权限和继承权限:
struct的默认成员访问权限是public,默认继承方式是public继承。class的默认成员访问权限是private,默认继承方式是private继承。
- 最佳实践的约定:
struct来表示一个简单的、由不同数据类型组成的数据集合,强调数据的组合。class则更常用于表示具有复杂行为和需要封装性的抽象数据类型。仅是一种约定。
- 功能上几乎完全相同
-
结构体的应用场景
- 表示具有多个相关属性的实体,例如学生、书籍、商品、坐标点等。
- 作为函数参数和返回值,传递复杂的数据结构。
- 构建更复杂的数据结构,如链表、树等。