前言
这一节内容可能会涉及到一些之前所学习的相关知识,如果你还有不明不白的,可以去温习一下之前所学C++基础教程
C++ 结构体(struct)
在C++中,结构体(struct) 是一种非常有用的数据类型,它可以把多种类型的数据组合在一起,形成一个整体。简单来说,结构体就是一个容器,可以存放不同类型的变量,这些变量称为结构体的“成员”。
为什么需要结构体?
假设我们要管理一本书的信息,比如:
- 标题(Title):比如《C++ 教程》
- 作者(Author):比如“张三”
- 类别(Subject):比如“编程”
- 编号(Book ID):比如“12345”
这些属性的数据类型是不同的:
如果用普通的变量来存储这些信息,代码会变得杂乱无章:
1 2 3 4
| string title1 = "C++ 教程"; string author1 = "张三"; string subject1 = "编程"; int bookID1 = 12345;
|
每增加一本书,就需要定义四个变量,管理起来非常麻烦。
结构体解决了这个问题:它允许我们把这些相关的数据组合起来,作为一个整体来管理。
如何定义结构体?
用 struct 关键字来定义结构体,基本语法如下:
1 2 3 4 5
| struct StructName { DataType MemberName1; DataType MemberName2; ... };
|
例如,定义一个用于表示“书籍”的结构体:
1 2 3 4 5 6
| struct Book { char title[50]; char author[50]; char subject[100]; int book_id; };
|
Book 是结构体类型的名字。
- 结构体里包含的成员有:
title、author、subject 和 book_id。
如何使用结构体?
定义了结构体后,可以用它来创建“结构体变量”,表示具体的对象(如一本书):
1. 创建结构体变量
上面创建了两个结构体变量 book1 和 book2,分别表示两本书。
2. 访问结构体成员
结构体的成员可以通过 . 运算符 来访问或赋值:
1 2 3
| book1.book_id = 12345; strcpy(book1.title, "C++ 教程"); cout << book1.title << endl;
|
完整示例:存储并输出两本书的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include <iostream> #include <cstring> using namespace std;
struct Book { char title[50]; char author[50]; char subject[100]; int book_id; };
int main() { Book book1, book2;
strcpy(book1.title, "C++ 教程"); strcpy(book1.author, "张三"); strcpy(book1.subject, "编程"); book1.book_id = 12345;
strcpy(book2.title, "CSS 教程"); strcpy(book2.author, "李四"); strcpy(book2.subject, "前端开发"); book2.book_id = 12346;
cout << "第一本书标题: " << book1.title << endl; cout << "第一本书作者: " << book1.author << endl; cout << "第一本书类别: " << book1.subject << endl; cout << "第一本书编号: " << book1.book_id << endl;
cout << "第二本书标题: " << book2.title << endl; cout << "第二本书作者: " << book2.author << endl; cout << "第二本书类别: " << book2.subject << endl; cout << "第二本书编号: " << book2.book_id << endl;
return 0; }
|
运行结果:
1 2 3 4 5 6 7 8
| 第一本书标题: C++ 教程 第一本书作者: 张三 第一本书类别: 编程 第一本书编号: 12345 第二本书标题: CSS 教程 第二本书作者: 李四 第二本书类别: 前端开发 第二本书编号: 12346
|
结构体的高级用法
1. 结构体作为函数参数
可以把结构体传递给函数,用来操作结构体成员数据。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include <iostream> #include <cstring> using namespace std;
struct Book { char title[50]; char author[50]; char subject[100]; int book_id; };
void printBook(Book book) { cout << "标题: " << book.title << endl; cout << "作者: " << book.author << endl; cout << "类别: " << book.subject << endl; cout << "编号: " << book.book_id << endl; }
int main() { Book book1; strcpy(book1.title, "C++ 教程"); strcpy(book1.author, "张三"); strcpy(book1.subject, "编程"); book1.book_id = 12345;
printBook(book1); return 0; }
|
2. 指针操作结构体
用指针操作结构体变量,可以通过 -> 运算符访问成员。
1 2 3 4 5
| Book book1; Book* bookPtr = &book1;
bookPtr->book_id = 12345; cout << bookPtr->book_id;
|
3. 结构体中添加构造函数
像类一样,结构体也可以有构造函数,用来初始化数据。
1 2 3 4 5 6 7 8 9 10 11 12 13
| struct Book { string title; string author; string subject; int book_id;
Book(string t, string a, string s, int id) : title(t), author(a), subject(s), book_id(id) {} };
Book book1("C++ 教程", "张三", "编程", 12345);
|
结构体和类的区别
默认访问权限不同:
struct 的成员默认是 public。
class 的成员默认是 private。
适用场景:
- 结构体:用于简单数据的封装,比如存储图书信息、学生信息等。
- 类:用于更复杂的场景,比如需要继承、封装和多态的情况下。
小总结
- 结构体 是一种用户自定义的数据类型,用来把不同类型的数据组合成一个整体。
- 结构体可以用来管理复杂的数据,比如图书馆的书籍、学生的成绩等。
- 可以通过
. 运算符 访问成员,也可以通过 -> 运算符 用指针访问。
- 结构体支持函数传参、构造函数、指针操作等高级用法。
- 和类类似,但结构体更轻量,适合简单的数据封装任务。