首页 > 编程语言 >6.C++中的结构体

6.C++中的结构体

时间:2025-01-22 15:29:41浏览次数:3  
标签:std stu1 struct int 成员 C++ 结构

C++中的结构体

在 C++ 中,结构体(struct)是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起,形成一个新的复合数据类型。以下是关于 C++ 结构体的详细介绍:

定义与基本用法

  • 定义结构体:使用struct关键字来定义结构体。例如,要定义一个表示学生信息的结构体,可以这样写:
struct Student {
    std::string name;
    int age;
    double score;
};

这里Student是结构体的名称,它包含了name(字符串类型)、age(整型)和score(双精度浮点型)三个成员变量。

  • 创建结构体变量:定义好结构体后,就可以创建该结构体类型的变量。例如:
int main() {
    Student stu1;
    stu1.name = "Alice";
    stu1.age = 20;
    stu1.score = 90.5;

    return 0;
}

这里创建了一个Student类型的变量stu1,并为其成员变量赋值。

结构体的特点

  • 数据封装:结构体将相关的数据成员封装在一个单元中,使代码更易于理解和管理。比如在表示学生信息的结构体中,将姓名、年龄、成绩等信息组合在一起,清晰地表示了一个学生的完整信息。
  • 成员访问:通过结构体变量名和成员访问运算符.来访问结构体的成员。如上面示例中stu1.name就是访问stu1变量的name成员。
  • 可作为函数参数和返回值:结构体可以像其他基本数据类型一样,作为函数的参数传递和返回值。这样可以方便地在函数之间传递一组相关的数据。例如:
void printStudentInfo(Student stu) {
    std::cout << "Name: " << stu.name << ", Age: " << stu.age << ", Score: " << stu.score << std::endl;
}

int main() {
    Student stu1 = {"Bob", 21, 85.0};
    printStudentInfo(stu1);

    return 0;
}

这里printStudentInfo函数接受一个Student类型的结构体变量作为参数,并输出学生的信息。

结构体与类的区别

  • 默认访问权限:在结构体中,成员的默认访问权限是public(公共的),而在类中,成员的默认访问权限是private(私有的)。
  • 设计目的:虽然结构体和类都可以用于封装数据和行为,但类更侧重于面向对象编程中的数据抽象和封装,通常会包含成员函数来操作数据成员。结构体更多地用于简单的数据聚合,当不需要复杂的行为和封装时,使用结构体更合适。

结构体的应用场景

  • 数据存储和管理:在处理大量相关数据时,结构体可以将这些数据组织在一起,方便进行存储和操作。比如在数据库管理系统中,可能会使用结构体来表示数据库中的一条记录。
  • 函数参数传递:当需要向函数传递多个相关参数时,使用结构体可以使参数传递更清晰、简洁。避免了传递多个单独的参数可能带来的混淆。
  • 自定义数据类型:通过结构体可以创建自定义的数据类型,以满足特定的编程需求。例如在图形处理中,可以定义一个结构体来表示二维平面上的点或矩形等几何形状。

拓展内容:

结构体嵌套

结构体中可以包含其他结构体作为成员,这就是结构体的嵌套。例如:

struct Address {
    std::string street;
    std::string city;
    std::string zipCode;
};

struct Employee {
    std::string name;
    int age;
    Address address;  // 嵌套Address结构体
};

int main() {
    Employee emp;
    emp.name = "Charlie";
    emp.age = 25;
    emp.address.street = "123 Main St";
    emp.address.city = "Anytown";
    emp.address.zipCode = "12345";

    return 0;
}
结构体数组

可以定义结构体类型的数组,用于存储多个相同结构体类型的数据。例如:

struct Book {
    std::string title;
    std::string author;
    int year;
};

int main() {
    Book library[3];  // 定义包含3个Book结构体的数组

    library[0].title = "C++ Primer";
    library[0].author = "Stan Lippman";
    library[0].year = 2012;

    // 可以继续为其他元素赋值

    return 0;
}
结构体指针

可以定义指向结构体的指针,通过指针来访问结构体的成员。使用->运算符来通过指针访问结构体成员。例如:

struct Point {
    int x;
    int y;
};

int main() {
    Point p = {3, 5};
    Point* ptr = &p;

    std::cout << "x value: " << ptr->x << std::endl;
    std::cout << "y value: " << ptr->y << std::endl;

    return 0;
}
结构体中的成员函数

在 C++ 中,结构体也可以包含成员函数,这一点与类非常相似。例如:

struct Circle {
    double radius;

    // 成员函数,计算圆的面积
    double area() {
        return 3.14159 * radius * radius;
    }
};

int main() {
    Circle c;
    c.radius = 5.0;
    std::cout << "Circle area: " << c.area() << std::endl;

    return 0;
}
匿名结构体

可以定义没有名称的结构体,称为匿名结构体。例如:

int main() {
    struct {
        int a;
        double b;
    } anonStruct;

    anonStruct.a = 10;
    anonStruct.b = 3.14;

    return 0;
}
结构体的继承

C++ 中的结构体也支持继承,不过使用相对较少。例如:

struct Base {
    int baseValue;
};

struct Derived : public Base {
    int derivedValue;
};

int main() {
    Derived d;
    d.baseValue = 10;
    d.derivedValue = 20;

    return 0;
}

标签:std,stu1,struct,int,成员,C++,结构
From: https://blog.csdn.net/m0_60046831/article/details/145304558

相关文章

  • 打卡信奥刷题(647)用C++信奥P8342[普及组/提高] [COCI2021-2022#6] Med
    [COCI2021-2022#6]Med题目描述今天是公开赛的最后一轮。人们知道这两个比赛采用相同的计分系统。更准确地说,两场比赛都有666轮,每轮的积分在......
  • 216基于链式存储结构的图书信息表的修改
    描述定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据完成图书信息表的创建,然后计算所有图书的平均价格,将所有低于平均价格的图书价格提高20%,所有高于或等于平均价格的图书价格提高10%,最后逐行输出价格修改后的图书信息。输入输入n+1行,前n行是n本图书的信息(......
  • 打卡信奥刷题(645)用C++信奥P8318[普及组/提高] 『JROI-4』淘气的猴子
    『JROI-4』淘气的猴子题目背景众所周知,jockbutt是一个可爱的女孩纸。题目描述jockbutt有一个正整数序列,长度为nnn,分别为......
  • C/C++ 创建Socket实现双工通信
    点击查看代码实现简单的Socket通信服务端代码(Server)#include<stdio.h>#include<winsock2.h>#pragmacomment(lib,"ws2_32.lib")#definePORT9999intmain(){WSADATAWSAData;SOCKETsock,msgsock;structsockaddr_inServerAddr;......
  • Markdown+LaTeX+C++| VS Code 搭建高效学习环境
    Markdown+\(\LaTeX\)+C++|VSCode搭建高效学习环境开始之前:创建一个文件夹作为你的工作区,确保它没有中文路径并且文件夹下的文件也不能用中文命名。在https://code.visualstudio.com/上下载并安装VisualStudioCode。确保你的电脑系统为Windows且版本在Windows7.0......
  • HashMap的数据结构是怎样的?
    HashMap的数据结构在Java中,保存数据有两种比较简单的数据结构:数组和链表。数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。常用的哈希函数的冲突解决办法中有一种方法叫做链地址法,其实就是将数组和链表组合在一起,发挥了两者的优势,我们可......
  • 408数据结构笔记(Day 1)
    学习数据结构基础(c语言): 一、什么是分支(if/lese、switch),循环(for、while、dowhile)?程序的三种结构:顺序,分支,循环1、顺序:按照先后顺序执行比如:inta=2; ①doubleb=3.0;②先执行第①步,然后执行第②步。2、分支:可以使用 if、switch 实现分支结构if语句if(条件)......
  • GRFB UNet——基于多尺度注意网络盲道检测算法实现与模型C++部署
    GRFBUNet——基于多尺度注意网络盲道检测算法实现与模型C++部署1.概述盲道是视障人士安全出行的重要辅助设施。识别盲道的形状和位置,对于增强视障人士的自主移动能力至关重要,而视觉分割技术正是应对这一挑战的有效工具。为了显著提升盲道分割的精确度和稳定性,本文提出了......
  • C语言的循环结构
    循环结构是编程语言中的一种重要结构,用于重复执行一段代码。主要有三种循环结构:for循环,while循环和do-while循环。循环结构(1)当型循环结构:当条件P成立(为真)时,反复执行循环语句,直到条件P不成立(为假)时结束循环。(条件成立,才执行循环语句,for、while)(2)直到型循环结构:先......
  • C语言/C++——递归、递推、动态规划
    什么是动态规划:给定一个问题,我们把他拆成一个个子问题,直到子问题可以直接解决。然后把子问题的答案保存起来,以减少重复计算。再根据子问题的答案反推,得出原问题解的一种方法递归的过程:"递"的过程是分解子问题的过程;(dfs是第归的一种)            “归......