个人主页:[PingdiGuo_guo]
收录专栏:[C++干货专栏]
大家好,今天我们来了解一下结构体。
目录
1.结构体的概念与思想
结构体是C++中一种用户自定义的数据类型,它可以将不同类型的数据成员组合在一起,形成一个更复杂的数据结构。
结构体的思想是将相关的数据成员组织在一起,以便于表示一个实体或一个概念。这样的组合可以更好地描述和处理相关的数据。例如,一个人的信息可以包括姓名、年龄、性别等,这些数据可以用结构体组织在一起,形成一个人的实体。
结构体的概念是通过定义一个结构体类型并声明结构体变量来使用。结构体类型定义了结构体的成员以及每个成员的数据类型,变量则用来存储具体的数据值。结构体类型可以在程序中多次使用,每次使用时可以为其定义不同的变量。
结构体允许将不同类型的数据成员组合在一起,以便更好地描述和处理相关的数据。
2.结构体的用处
1.组织和表示复杂的数据结构:结构体可以用来组合不同类型的数据成员,以表示一个实体或一个概念。例如,可以用结构体来表示一个学生的信息,其中包括姓名、年龄、学号等数据成员。
2.定义和传递参数:结构体可以作为函数的参数或返回值,以传递多个相关的数据。通过结构体,可以将多个数据作为一个单一的参数传递给函数,从而减少函数参数的数量。
3.简化和提高代码的可读性:使用结构体可以将相关的数据成员组织在一起,从而使代码更具可读性。通过结构体,可以将相关的数据集中在一起,方便理解和使用。
4.数据库和文件操作:结构体可以用于表示数据库记录或文件中的数据。通过结构体,可以将相关的数据字段组织在一起,方便进行数据库操作或文件读写。
5.数据集合和容器:结构体可以用来定义数据集合,例如用结构体来表示一个点、线段或矩形等。结构体可以包含多个数据成员,以表示集合的属性和关系。
3.结构体的创建
在C++中,可以通过以下步骤创建结构体:
1. 定义结构体类型:使用struct关键字来定义结构体类型以及其名称。
2. 声明结构体变量:使用结构体类型来声明结构体变量。
3. 初始化结构体变量:可以通过多种方式初始化结构体变量,如逐个赋值或使用初始化列表。
下面是一个具体的例子:
// 定义结构体类型
struct P {
string name;
int age;
float height;
};
上述代码出现的信息:
struct:关键字,用于定义结构体类型
string name
int age
float height:结构体的成员
注意事项:
1.在定义结构体时,不要忘记在大括号后面加上分号。
2.结构体成员可以是不同类型的。
这种方式是在全局定义结构体,当然,还有一些其他的方式来定义结构体:
第二种方式是在类内定义结构体。这种方式在类的内部定义结构体,可以将结构体作为类的成员。这种方式的定义与全局定义的方式类似,只是在类内定义的结构体默认为public访问权限。例如:
class S {
public:
struct Score {
std::string subject;
int grade;
};
private:
std::string name;
Score score;
};
第三种方式是通过typedef关键字定义结构体的别名。这种方式可以为一个已定义的结构体类型定义一个别名,以便在后续代码中使用别名来代替结构体类型。例如:
typedef struct {
std::string name;
int age;
} Person;
在这种方式中,typedef关键字用于Person为结构体的别名,而不需要再使用关键字struct来定义结构体。这样就可以直接使用Person作为结构体类型来声明变量。
注意:在C++11之后,也可以使用using关键字来定义别名,例如:
using Person = struct {
std::string name;
int age;
};
这种方式与typedef的作用相同,只是使用了不同的语法。
4.结构体初始化
在C++中,给结构体初始化的步骤如下:
- 定义一个结构体变量。
- 使用点操作符(.)或者箭头操作符(->)访问结构体的成员。
- 为结构体的成员赋予相应的值。
#include <iostream>
#include <string>
struct Person {
std::string name;
int age;
};
int main() {
Person p;//定义结构体变量
p.name = "Alice";//赋值
p.age = 25;
std::cout << "Person: name = " << p.name << ", age = " << p.age << std::endl;
return 0;
}
5.结构体的输入输出
在C++中,结构体的输入输出可以通过重载输入输出运算符<<和>>来实现。下面是具体的步骤:
1. 输入结构体对象
1. 在结构体定义中重载输入运算符>>,并将输入流对象作为参数。
2. 在重载函数中,按照需要输入结构体的每个成员。可以使用输入流对象的>>运算符来读取输入的值,并将其赋给对应的结构体成员。
3. 返回输入流对象。
2. 输出结构体对象
1. 在结构体定义中重载输出运算符<<,并将输出流对象作为参数。
2. 在重载函数中,按照需要输出结构体的每个成员。可以使用输出流对象的<<运算符来输出结构体成员的值。
3. 返回输出流对象。
以下是一个示例代码,演示了如何实现结构体的输入输出:
#include <iostream>
#include <string>
struct Person {
std::string name;
int age;
};
int main() {
Person p;
std::cout << "Enter name: ";
std::getline(std::cin, p.name); // 使用getline()函数获取一行输入,避免空格问题
std::cout << "Enter age: ";
std::cin >> p.age;
std::cout << "Person details:" << std::endl;
std::cout << "Name: " << p.name << std::endl;
std::cout << "Age: " << p.age << std::endl;
return 0;
}
上述代码的步骤:
1.我们首先定义了一个名为"Person"的结构体,它包含了一个名为"name"的字符串和一个名为"age"的整数。
2.然后,在main函数中,我们创建了一个名为"p"的Person对象。
3.我们使用std::getline()函数来获取输入的姓名,这样可以避免由于输入中包含空格导致的问题。
4.然后,我们使用std::cin来输入年龄。
5.最后,我们使用std::cout来输出结构体对象的详细信息,包括姓名和年龄。
请注意,在编写输入和输出部分的代码时,可以根据实际需求进行自定义,以适应特定的输入和输出格式。
6.结构体的练习
题目1:定义一个结构体来表示一个矩形,包括宽度和高度。编写一个函数来计算矩形的面积和周长。
解决方案和代码:
#include <iostream>
// 定义矩形结构体
struct Rectangle
{
double width;
double height;
};
// 计算矩形的面积
double calculateArea(const Rectangle& rect)
{
return rect.width * rect.height;
}
// 计算矩形的周长
double calculatePerimeter(const Rectangle& rect)
{
return 2 * (rect.width + rect.height);
}
int main()
{
Rectangle rect;
// 输入矩形的宽度和高度
std::cout << "Enter the width of the rectangle: ";
std::cin >> rect.width;
std::cout << "Enter the height of the rectangle: ";
std::cin >> rect.height;
// 计算矩形的面积和周长
double area = calculateArea(rect);
double perimeter = calculatePerimeter(rect);
// 输出结果
std::cout << "Area of the rectangle: " << area << std::endl;
std::cout << "Perimeter of the rectangle: " << perimeter << std::endl;
return 0;
}
题目2:定义一个结构体来表示一个学生,包括姓名、年龄和分数。编写一个函数来读取多个学生的信息,并计算平均分数。
解决方案和代码:
#include <iostream>
#include <vector>
// 定义学生结构体
struct Student
{
std::string name;
int age;
double score;
};
// 读取多个学生信息并计算平均分数
double calculateAverageScore(const std::vector<Student>& students)
{
double sum = 0;
for (const Student& s : students)
{
sum += s.score;
}
return sum / students.size();
}
int main() {
int numStudents;
// 输入学生的数量
std::cout << "Enter the number of students: ";
std::cin >> numStudents;
std::vector<Student> students;
// 读取每个学生的信息
for (int i = 0; i < numStudents; i++)
{
Student s;
std::cout << "Enter the name of student " << i+1 << ": ";
std::cin >> s.name;
std::cout << "Enter the age of student " << i+1 << ": ";
std::cin >> s.age;
std::cout << "Enter the score of student " << i+1 << ": ";
std::cin >> s.score;
students.push_back(s);
}
// 计算平均分数
double averageScore = calculateAverageScore(students);
// 输出结果
std::cout << "Average score of the students: " << averageScore << std::endl;
return 0;
}
7.总结
本篇博客到这里就结束了,感谢大家的支持与观看,如果有好的建议欢迎留言,谢谢大家啦!