C++结构体详解
我们来详细讲解 C++ 的结构体(struct)。我会从基本概念到高级用法一步步展开,并用示例让你理解。
1️⃣ 基本概念
结构体是用来封装一组不同类型的数据的 自定义数据类型。
与类(class)类似,但默认 成员访问权限是 public。
常用于组合多个相关的数据,例如一个点(x, y)或者一个学生(姓名、年龄、成绩)。
示例
#include <iostream>
#include <string>struct Student {std::string name;int age;double score;
};int main() {Student s1; // 定义结构体变量s1.name = "Alice"; // 访问成员s1.age = 20;s1.score = 95.5;std::cout << s1.name << " is " << s1.age << " years old, score: " << s1.score << "\n";
}
解释:
struct Student
定义了一个结构体类型Student
。s1
是结构体变量,可以访问name
、age
、score
。
2️⃣ 初始化方式
传统逐个赋值
Student s2;
s2.name = "Bob";
s2.age = 22;
s2.score = 88.0;
列表初始化(C++11+)
Student s3{"Charlie", 21, 92.5};
3️⃣ 结构体与函数
结构体可以作为函数参数或返回值:
void printStudent(const Student& s) {std::cout << s.name << ", age: " << s.age << ", score: " << s.score << "\n";
}Student createStudent() {return {"David", 23, 90.0};
}int main() {Student s = createStudent();printStudent(s);
}
使用
const Student&
避免拷贝,提高效率。函数也可以返回结构体,方便一次性返回多个数据。
4️⃣ 结构体和类的区别
特性 | struct | class |
---|---|---|
默认访问权限 | public | private |
面向对象能力 | 支持(C++ 可以有方法、构造函数、继承) | 支持 |
主要用途 | 数据组合 | 数据和行为封装 |
在 C++ 中,
struct
和class
的本质几乎一样,只是默认权限不同。
5️⃣ 构造函数、方法与结构体
C++ 的结构体可以定义构造函数和成员函数:
struct Point {int x, y;// 构造函数Point(int a, int b) : x(a), y(b) {}// 成员函数void move(int dx, int dy) {x += dx;y += dy;}void print() {std::cout << "(" << x << ", " << y << ")\n";}
};int main() {Point p(1, 2);p.print(); // (1, 2)p.move(3, 4);p.print(); // (4, 6)
}
6️⃣ 嵌套结构体
结构体可以嵌套其他结构体:
struct Date {int year, month, day;
};struct Employee {std::string name;Date birthday;
};int main() {Employee e{"Alice", {1995, 5, 20}};std::cout << e.name << " was born on "<< e.birthday.year << "-" << e.birthday.month << "-" << e.birthday.day << "\n";
}
7️⃣ 总结结构体特点
数据组合:把相关变量组合成一个整体。
可有方法:C++ 允许结构体有成员函数、构造函数。
默认 public:成员默认是公有的。
函数交互方便:可作为参数或返回值。
可嵌套:支持复杂数据结构。