C++中的结构体详细介绍
在 C++ 中,结构体(struct)是一种用户自定义的数据类型,它可以包含不同类型的数据成员,包括基本数据类型(如 int、double 等)和其他结构体。下面是一个简单的结构体示例:
#include <iostream> #include <string> using namespace std; // 定义结构体 struct Student { string name; // 姓名 int age; // 年龄 double score; // 分数 }; int main() { // 创建结构体变量 Student stu; // 设置结构体变量的值 stu.name = "张三"; stu.age = 18; stu.score = 90.5; // 输出结构体变量的值 cout << "姓名:" << stu.name << endl; cout << "年龄:" << stu.age << endl; cout << "分数:" << stu.score << endl; return 0; }
上面的代码定义了一个名为 Student
的结构体,它包含三个成员变量:name
、age
和 score
。然后在 main
函数中创建了一个 stu
变量,并对其成员变量进行了赋值。最后输出了结构体变量的值。
除了可以像上面那样单独定义结构体外,也可以将结构体定义在命名空间或类的内部。下面是一个将结构体定义在命名空间内部的示例:
#include <iostream> #include <string> using namespace std; namespace mynamespace { // 定义结构体 struct Student { string name; // 姓名 int age; // 年龄 double score; // 分数 }; } int main() { // 创建结构体变量 mynamespace::Student stu; // 设置结构体变量的值 stu.name = "张三"; stu.age = 18; stu.score = 90.5; // 输出结构体变量的值 cout << "姓名:" << stu.name << endl; cout << "年龄:" << stu.age << endl; cout << "分数:" << stu.score << endl; return 0; }
在上面的代码中,结构体 Student
被定义在了 mynamespace
命名空间内部,因此在 main
函数中需要使用 mynamespace::
前缀来访问它。
结构体还可以包含函数,这些函数被称为结构体的成员函数(member function)。下面是一个包含成员函数的结构体示例:
#include <iostream> #include <string> using namespace std; struct Student { string name; // 姓名 int age; // 年龄 double score; // 分数 // 定义成员函数 void print() { cout << "姓名:" << name << endl; cout << "年龄:" << age << endl; cout << "分数:" << score << endl; } }; int main() { // 创建 }
上面代码中的 Student
结构体新增了一个 print()
成员函数,它的作用是输出结构体的成员变量值。在 main()
函数中,先创建一个 stu
变量,并对其成员变量进行了赋值。然后通过调用 stu.print()
函数输出了结构体变量的值。
除了在结构体内部定义成员函数,也可以在结构体外部定义成员函数,只需要在函数名前加上结构体的名称和作用域解析符号即可。下面是一个在结构体外部定义成员函数的示例:
#include <iostream> #include <string> using namespace std; struct Student { string name; // 姓名 int age; // 年龄 double score; // 分数 // 声明成员函数 void print(); }; // 定义成员函数 void Student::print() { cout << "姓名:" << name << endl; cout << "年龄:" << age << endl; cout << "分数:" << score << endl; } int main() { // 创建结构体变量 Student stu; // 设置结构体变量的值 stu.name = "张三"; stu.age = 18; stu.score = 90.5; // 调用成员函数输出结构体变量的值 stu.print(); return 0; }
上面代码中的 Student
结构体定义了一个 print()
成员函数,但是并没有在结构体内部实现它。相反,它在结构体外部进行了定义,实现了与上一个示例中相同的功能。
结构体也可以作为函数参数进行传递,这样可以方便地对结构体变量进行操作。下面是一个使用结构体作为函数参数的示例:
#include <iostream> #include <string> using namespace std; struct Student { string name; // 姓名 int age; // 年龄 double score; // 分数};// 定义函数,传入结构体参数void printStudent(Student stu) { cout << "姓名:" << stu.name << endl; cout << "年龄:" << stu.age << endl; cout << "分数:" << stu.score << endl; } int main() { // 创建结构体变量 Student stu; // 设置结构体变量的值 stu.name = "张三"; stu.age = 18; stu.score = 90.5; // 调用函数输出结构体变量的值 printStudent(stu); return 0; }
上面代码中的 printStudent()
函数接收一个结构体参数,并输出了结构体的成员变量值。在 main()
函数中,创建了一个 stu
变量,并对其成员变量进行了赋值。然后通过调用 printStudent(stu)
函数输出了结构体变量的值。
总之,结构体是 C++ 中一个非常有用的数据类型,它可以方便地组织数据,并且可以定义成员函数和重载运算符等操作。在实际编程中,我们可以使用结构体来表示一个具有一定属性和行为的对象,例如表示一个学生、一个汽车、一个银行账户等等。
下面是一些关于结构体的常见问题和回答:
Q: 结构体和类有什么区别?
A: 在 C++ 中,结构体和类的定义基本上是一样的,只是默认的访问权限不同。结构体的默认访问权限是公共的(public),而类的默认访问权限是私有的(private)。因此,结构体更适合于只包含数据成员而不包含成员函数的情况,而类更适合于包含成员函数的情况。但实际上,在 C++ 中,结构体和类之间的区别并不是很大,它们可以互相转换使用。
Q: 结构体和数组有什么区别?
A: 结构体和数组都可以用来存储一组相关的数据,但它们的用途和实现方式略有不同。数组一般用来存储同一种类型的数据,而结构体可以用来存储不同类型的数据。数组的元素是连续存储的,可以通过下标访问,而结构体的成员变量是离散存储的,需要通过成员变量名访问。另外,结构体可以包含成员函数,而数组不能。
Q: 什么时候需要使用结构体?
A: 当需要组织一组相关的数据,并且这些数据不仅仅是同一种类型的时候,可以考虑使用结构体。例如,表示一个学生可以包含姓名、年龄、学号、班级等信息,这些信息的类型不同,可以使用结构体来表示一个学生对象。此外,当需要在数据中包含一些操作时,也可以使用结构体来定义成员函数,方便地对数据进行操作。