C++——自定义数据类型(结构体)

134 阅读2分钟

结构体 (struct):将数据打包成有意义的整体

  • 结构体就是一种自定义的数据类型,它允许你将不同类型的数据组合在一起,形成一个有意义的新的数据

  • 定义结构体:设计你的数据“包裹”

    struct Student {
        std::string name; // 学生姓名
        int id;          // 学生学号
        float score;      // 学生成绩
    };
    
    • struct 关键字表明我们正在定义一个结构体。
    • Student 是这个结构体的名称,你可以根据需要自定义名称,但要遵循命名规范,使其具有描述性。
  • 使用结构体:创建和访问结构体变量

    #include <iostream>
    #include <string>
    
    struct Student {
        std::string name;
        int id;
        float score;
    };
    
    int main() {
        // 声明一个 Student 类型的变量 s1
        Student s1;
    
        // 为 s1 的成员赋值
        s1.name = "Alice";
        s1.id = 2023001;
        s1.score = 95.5;
    
        // 访问并输出 s1 的成员
        std::cout << "姓名: " << s1.name << std::endl;
        std::cout << "学号: " << s1.id << std::endl;
        std::cout << "成绩: " << s1.score << std::endl;
    
        return 0;
    }
    
    • 要使用结构体,首先需要声明结构体类型的变量,就像声明 intfloat 类型的变量一样。
    • 使用点运算符 . 来访问结构体变量的成员。例如,s1.name 表示访问 s1 这个 Student 结构体变量的 name 成员。
  • C++ 中的 struct 与 C 语言中的 struct 的主要区别

    • 成员函数:
      • C++ 中: struct 不仅可以包含数据成员,还可以包含函数(称为成员函数或方法)
      • C 中: struct 只能包含数据成员。
    • 默认访问权限:
      • 共同: C++与C 中 struct 的默认成员访问默认权限都是是 public
      • C++ 的 struct 同样可以使用 publicprivateprotected 关键字来显式控制成员的访问权限,class 更常用于实现具有私有成员的抽象数据类型。
  • structclass 的异同

    • 功能上几乎完全相同
      • 它们都可以包含数据成员和成员函数,并且都支持继承、多态等面向对象编程的特性。
    • 核心区别在于默认的成员访问权限和继承权限:
      • struct 的默认成员访问权限是 public,默认继承方式是 public 继承。
      • class 的默认成员访问权限是 private,默认继承方式是 private 继承。
    • 最佳实践的约定:
      • struct 来表示一个简单的、由不同数据类型组成的数据集合,强调数据的组合。
      • class 则更常用于表示具有复杂行为和需要封装性的抽象数据类型。仅是一种约定。
  • 结构体的应用场景

    • 表示具有多个相关属性的实体,例如学生、书籍、商品、坐标点等。
    • 作为函数参数和返回值,传递复杂的数据结构。
    • 构建更复杂的数据结构,如链表、树等。