当前位置: 首页 > news >正文

C++结构体详解

我们来详细讲解 C++ 的结构体(struct)。我会从基本概念到高级用法一步步展开,并用示例让你理解。


1️⃣ 基本概念

  • 结构体是用来封装一组不同类型的数据的 自定义数据类型

  • 与类(class)类似,但默认 成员访问权限是 public

  • 常用于组合多个相关的数据,例如一个点(x, y)或者一个学生(姓名、年龄、成绩)。

示例

#include <iostream>
#include <string>struct Student {std::string name;int age;double score;
};int main() {Student s1;           // 定义结构体变量s1.name = "Alice";    // 访问成员s1.age = 20;s1.score = 95.5;std::cout << s1.name << " is " << s1.age << " years old, score: " << s1.score << "\n";
}

解释

  • struct Student 定义了一个结构体类型 Student

  • s1 是结构体变量,可以访问 nameagescore


2️⃣ 初始化方式

传统逐个赋值

Student s2;
s2.name = "Bob";
s2.age = 22;
s2.score = 88.0;

列表初始化(C++11+)

Student s3{"Charlie", 21, 92.5};

3️⃣ 结构体与函数

结构体可以作为函数参数或返回值:

void printStudent(const Student& s) {std::cout << s.name << ", age: " << s.age << ", score: " << s.score << "\n";
}Student createStudent() {return {"David", 23, 90.0};
}int main() {Student s = createStudent();printStudent(s);
}
  • 使用 const Student& 避免拷贝,提高效率。

  • 函数也可以返回结构体,方便一次性返回多个数据。


4️⃣ 结构体和类的区别

特性structclass
默认访问权限publicprivate
面向对象能力支持(C++ 可以有方法、构造函数、继承)支持
主要用途数据组合数据和行为封装

在 C++ 中,struct 和 class 的本质几乎一样,只是默认权限不同。


5️⃣ 构造函数、方法与结构体

C++ 的结构体可以定义构造函数和成员函数:

struct Point {int x, y;// 构造函数Point(int a, int b) : x(a), y(b) {}// 成员函数void move(int dx, int dy) {x += dx;y += dy;}void print() {std::cout << "(" << x << ", " << y << ")\n";}
};int main() {Point p(1, 2);p.print();   // (1, 2)p.move(3, 4);p.print();   // (4, 6)
}

6️⃣ 嵌套结构体

结构体可以嵌套其他结构体:

struct Date {int year, month, day;
};struct Employee {std::string name;Date birthday;
};int main() {Employee e{"Alice", {1995, 5, 20}};std::cout << e.name << " was born on "<< e.birthday.year << "-" << e.birthday.month << "-" << e.birthday.day << "\n";
}

7️⃣ 总结结构体特点

  1. 数据组合:把相关变量组合成一个整体。

  2. 可有方法:C++ 允许结构体有成员函数、构造函数。

  3. 默认 public:成员默认是公有的。

  4. 函数交互方便:可作为参数或返回值。

  5. 可嵌套:支持复杂数据结构。

http://www.lryc.cn/news/621890.html

相关文章:

  • 局部变量与全局变量的关系及应用
  • 【swift开发】SwiftUI概述 SwiftUI 全面解析:苹果生态的声明式 UI 革命
  • Unity_导航网格
  • 什么是国产化防爆平板?有哪些功能特点?应用在什么场景?
  • Unity与OpenGL中的材质系统详解
  • 【完整源码+数据集+部署教程】孔洞检测系统源码和数据集:改进yolo11-RetBlock
  • 汽车线束高压屏蔽层接地设计
  • uniapp小程序ocr-navigator身份证拍照上传替换方案
  • 解决在uniapp真机运行上i18n变量获取不到问题
  • USB ADB 简介
  • 为什么游戏会出现“卡顿”:`clock.tick()` v.s. `clock.get_fps()`
  • 【Cuda 编程思想】LinearQaunt-分块量化矩阵乘法计算过程
  • 25. 移动端-uni-app
  • 【URP】[光栅阶段][光栅插值]Unity透视校正插值
  • 2025年最新政策下,劳务报酬的增值税应该如何计算?
  • MqSQL中的《快照读》和《当前读》
  • Prometheus 监控 Kubernetes Cluster 最新极简教程
  • [论文笔记] WiscKey: Separating Keys from Values in SSD-Conscious Storage
  • DeepSeek-V2:一种强大、经济且高效的混合专家语言模型
  • 在 macOS 上顺利安装 lapsolver
  • 从根本上解决MAC权限问题(关闭sip)
  • vue3 wangeditor5 编辑器,使用方法
  • demo 通讯录 + 城市选择器 (字母索引左右联动 ListItemGroup+AlphabetIndexer)笔记
  • 分布式锁:从理论到实战的深度指南
  • 【机器人-基础知识】ROS常见功能架构
  • 微软自曝Win 11严重漏洞:可导致全盘数据丢失
  • Kafka生产者原理深度解析
  • 从ChatGPT到智能助手:Agent智能体如何颠覆AI应用
  • Python爬虫反爬检测失效问题的代理池轮换与请求头伪装实战方案
  • 【121页PPT】智慧方案智慧综合体智能化设计方案(附下载方式)