C++结构体

个人主页:[PingdiGuo_guo]

收录专栏:[C++干货专栏]

大家好,今天我们来了解一下结构体。

目录

1.结构体的概念与思想

2.结构体的用处

3.结构体的创建

4.结构体初始化

5.结构体的输入输出

1. 输入结构体对象

2. 输出结构体对象

6.结构体的练习

7.总结


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++中,给结构体初始化的步骤如下:

  1. 定义一个结构体变量。
  2. 使用点操作符(.)或者箭头操作符(->)访问结构体的成员。
  3. 为结构体的成员赋予相应的值。
​
#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.总结

本篇博客到这里就结束了,感谢大家的支持与观看,如果有好的建议欢迎留言,谢谢大家啦!

  • 37
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值