news 2026/4/15 9:14:52

结构体的初认识

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
结构体的初认识

C++ 结构体(struct)是用户自定义的数据类型,核心用于封装多个不同类型的数据成员,也支持成员函数和访问控制。

核心特性

  1. 默认访问权限为 public,结构体间可直接访问成员(类 class 默认 private)。
  2. 能包含数据成员(如 int、string 等)和成员函数,还支持构造函数、析构函数。
  3. 可用于定义变量、作为函数参数或返回值,也能实现继承和多态(与类功能几乎一致)。

一、构造函数(初始化结构体)

结构体支持自定义构造函数(无参 / 有参 / 拷贝),替代传统的 “赋值初始化”,让初始化更规范。

cpp

运行

#include <iostream> #include <string> using namespace std; struct Student { string name; int age; float score; // 1. 无参构造函数(默认构造) Student() { name = "未知"; age = 0; score = 0.0; } // 2. 有参构造函数(推荐) Student(string n, int a, float s) : name(n), age(a), score(s) {} // 3. 拷贝构造函数(复制已有对象) Student(const Student& other) { name = other.name; age = other.age; score = other.score; cout << "拷贝构造被调用" << endl; } void showInfo() { cout << "姓名:" << name << ",年龄:" << age << ",成绩:" << score << endl; } }; int main() { Student stu1; // 调用无参构造 stu1.showInfo(); // 输出:姓名:未知,年龄:0,成绩:0 Student stu2("李四", 19, 92.0); // 调用有参构造 stu2.showInfo(); // 输出:姓名:李四,年龄:19,成绩:92 Student stu3 = stu2; // 调用拷贝构造 stu3.showInfo(); // 输出:姓名:李四,年龄:19,成绩:92 return 0; }

二、指针 / 引用访问结构体成员

结构体变量的指针 / 引用需用->(指针)或.(引用)访问成员,是数组、函数参数传递的高频用法。

cpp

运行

#include <iostream> #include <string> using namespace std; struct Book { string title; float price; }; // 引用传参(避免拷贝,可修改原数据) void updatePrice(Book& book, float newPrice) { book.price = newPrice; } // 指针传参 void printBook(const Book* book) { // const 防止误修改 cout << "书名:" << book->title << ",价格:" << book->price << endl; } int main() { Book b1 = {"C++ Primer", 89.9}; // 引用访问 Book& refB = b1; refB.title = "C++ Primer 中文版"; updatePrice(refB, 79.9); // 指针访问 Book* ptrB = &b1; printBook(ptrB); // 输出:书名:C++ Primer 中文版,价格:79.9 return 0; }

三、结构体数组

批量管理结构体对象,常用于存储列表数据(如学生列表、商品列表)。

cpp

运行

#include <iostream> #include <string> using namespace std; struct Product { string name; int stock; // 库存 float price; }; int main() { // 初始化结构体数组 Product products[3] = { {"手机", 50, 2999.9}, {"耳机", 200, 199.9}, {"充电器", 500, 49.9} }; // 遍历数组并修改/输出 for (int i = 0; i < 3; i++) { products[i].price *= 0.9; // 打9折 cout << "商品:" << products[i].name << ",库存:" << products[i].stock << ",折后价:" << products[i].price << endl; } return 0; }

四、结构体继承(与类一致)

结构体支持继承(默认 public 继承),可复用父结构体的成员,实现 “扩展”。

cpp

运行

#include <iostream> #include <string> using namespace std; // 父结构体(基类) struct Person { string name; int age; void basicInfo() { cout << "姓名:" << name << ",年龄:" << age << endl; } }; // 子结构体(派生类):继承 Person struct Teacher : Person { // 默认 public 继承 string subject; // 新增成员 int salary; // 新增成员 void teachInfo() { basicInfo(); // 调用父结构体成员 cout << "授课科目:" << subject << ",薪资:" << salary << endl; } }; int main() { Teacher t1; t1.name = "王老师"; // 访问父结构体成员 t1.age = 35; t1.subject = "数学"; t1.salary = 8000; t1.teachInfo(); return 0; }

五、静态成员(共享数据)

结构体的静态成员属于 “整个结构体”,而非单个对象,所有对象共享该值(如统计结构体对象数量)。

cpp

运行

#include <iostream> #include <string> using namespace std; struct Car { string brand; static int count; // 静态成员:统计创建的汽车数量 // 构造函数:创建对象时计数+1 Car(string b) : brand(b) { count++; } // 静态成员函数:只能访问静态成员 static void showCount() { cout << "已创建 " << count << " 辆汽车" << endl; } }; // 静态成员必须在全局作用域初始化 int Car::count = 0; int main() { Car c1("宝马"); Car c2("奔驰"); Car c3("奥迪"); Car::showCount(); // 输出:已创建 3 辆汽车 cout << "直接访问静态成员:" << Car::count << endl; // 输出:3 return 0; }

六、运算符重载(自定义结构体运算)

重载+==<<等运算符,让结构体支持 “类原生类型” 的运算(如比较、输出)。

cpp

运行

#include <iostream> #include <string> using namespace std; struct Point { int x; int y; // 重载 + 运算符:两个点相加 Point operator+(const Point& other) const { return {x + other.x, y + other.y}; } // 重载 == 运算符:判断两个点是否相等 bool operator==(const Point& other) const { return x == other.x && y == other.y; } }; // 重载 << 运算符:直接输出结构体(全局函数) ostream& operator<<(ostream& os, const Point& p) { os << "(" << p.x << ", " << p.y << ")"; return os; } int main() { Point p1 = {1, 2}; Point p2 = {3, 4}; Point p3 = p1 + p2; cout << "p1 + p2 = " << p3 << endl; // 输出:(4, 6) if (p1 == p2) { cout << "p1 和 p2 相等" << endl; } else { cout << "p1 和 p2 不相等" << endl; // 执行此分支 } return 0; }

七、结构体嵌套(复合数据)

结构体内部可包含其他结构体,实现 “复杂数据模型”(如 “学生” 包含 “地址” 结构体)。

cpp

运行

#include <iostream> #include <string> using namespace std; // 嵌套的子结构体 struct Address { string province; string city; string detail; }; // 主结构体 struct Student { string name; int age; Address addr; // 包含 Address 结构体 void showAll() { cout << "姓名:" << name << ",年龄:" << age << endl; cout << "地址:" << addr.province << "省" << addr.city << "市" << addr.detail << endl; } }; int main() { Student stu; stu.name = "赵五"; stu.age = 20; stu.addr = {"广东", "深圳", "南山区XX路XX号"}; stu.showAll(); // 输出: // 姓名:赵五,年龄:20 // 地址:广东省深圳市南山区XX路XX号 return 0; }

核心总结

C++ 结构体与类的功能几乎完全一致,唯一核心区别是默认访问权限

  • struct:成员默认 public;
  • class:成员默认 private。

实际开发中:

  • 若仅封装 “纯数据”(无复杂行为),优先用 struct;
  • 若需封装 “数据 + 复杂逻辑”(如多态、严格访问控制),优先用 class。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 12:45:34

当PPT成为“认知翻译器”:Paperzz AI如何用3000字重构演示文稿的底层逻辑——从文档到幻灯片,一个不靠“套模板”的智能语义转化系统

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - AI PPT制作https://www.paperzz.cc/aiPpt &#x1f4c5; 本文撰写于&#xff1a;2025年12月15日 星期一 ——非广告 非测评 非功能说明书 非工具推销单 它更像一份「演示文稿的认知工程手册…

作者头像 李华
网站建设 2026/4/14 17:00:02

无需高端显卡!Qwen3-8B在普通GPU上的流畅运行秘诀

无需高端显卡&#xff01;Qwen3-8B在普通GPU上的流畅运行秘诀 在一台搭载RTX 3060笔记本电脑上&#xff0c;一位研究生正用本地部署的AI模型实时分析长达百页的PDF论文&#xff1b;一家初创公司利用自建的聊天机器人处理客户咨询&#xff0c;月度AI支出从数万元降至几乎为零。这…

作者头像 李华
网站建设 2026/4/9 1:02:31

“快捷回复”:话术管理工具 —— 支持分组分类、快速检索,一键新建 备份话术,适配高效沟通场景

在客服、行政、销售等高频沟通场景中&#xff0c;重复话术的逐字输入不仅消耗时间&#xff0c;还易出现表述偏差 —— 比如客服应对常见咨询、行政回复流程问题时&#xff0c;反复编辑相似内容会大幅降低工作节奏。大飞哥客服快速回复工具正是为解决这一问题设计的高效辅助工具…

作者头像 李华
网站建设 2026/4/4 8:43:22

跨国品牌GEO优化实战:多区域合规布局与文化适配关键策略

一、全球化布局的合规挑战与应对框架1.1 数据隐私法规矩阵管理GDPR&#xff08;欧盟&#xff09;&#xff1a;用户数据全生命周期管理&#xff0c;重点关注“被遗忘权”和数据可携带性CCPA/CPRA&#xff08;加州&#xff09;&#xff1a;消费者知情权与选择权&#xff0c;年度数…

作者头像 李华
网站建设 2026/4/8 14:35:14

中小企业AI转型首选:Qwen3-14B中型大模型实战应用解析

中小企业AI转型首选&#xff1a;Qwen3-14B中型大模型实战应用解析 在智能客服自动回复用户咨询的瞬间&#xff0c;系统不仅要理解“我的订单还没发”背后的焦急情绪&#xff0c;还要准确识别订单编号、查询物流状态、判断是否需要创建工单——这一连串操作如果依赖人工&#xf…

作者头像 李华
网站建设 2026/3/25 7:35:32

Transformer模型详解系列:Qwen3-VL-8B的跨模态架构解析

Qwen3-VL-8B 跨模态架构深度解析 在智能应用日益依赖多模态理解的今天&#xff0c;如何让AI“看懂”图像并用自然语言准确表达&#xff0c;已成为工业界的核心挑战。传统方案往往依赖复杂的流水线&#xff1a;先目标检测、再OCR识别、最后接NLP模型生成描述——这种割裂式处理不…

作者头像 李华