- 博客(14)
- 收藏
- 关注
原创 工业化C++:3. 继承、虚函数与运行时多态:从水果加工到日志策略设计
让一个新的类,在已有类的基础上继续扩展。public:现在我们要写苹果。苹果本身也是水果,所以苹果理应拥有水果共有的能力,比如清洗、称重、入库。这时没必要重新写一遍。可以直接让Apple继承Fruit可以直接调用父类中的wash()。复用已有类的成员,同时建立类型关系。当多个类之间存在明确的 Is-A 关系,同时又拥有一部分可以复用的公共属性或行为时,就可以考虑建立继承体系,将共性放到父类中,将差异保留给各个子类。这个思路并不只适用于水果这样的教学示例。
2026-10-12 19:37:04
359
1
原创 工业化C++:2.std::function、Lambda 与回调机制
严格来说,Lambda 表达式会生成一个匿名的闭包类型,执行 Lambda 表达式得到的对象称为闭包对象。我们平常所说的“Lambda 捕获变量”,实际上就是这些状态被保存进了闭包对象内部简单来说,Lambda 就是一个“随用随写”的匿名函数。它的基本语法长这样:[捕获列表](参数列表) { 函数体 }其中最让人混淆的就是[...]和(...)捕获列表[...]是“创建时打包进背包的上下文数据”(定义 Lambda 时就确定了)。参数列表(...)
2026-09-25 19:51:34
396
3
原创 工业化C++:1. 智能指针的使用:从手动管理对象到自动管理生命周期
在实际开发中,我们不需要把智能指针想得太复杂。面对一个需要管理的资源或对象,只需要问自己三个问题:1. 智能指针选型决策表智能指针类型所有权模型引用计数开销典型适用场景独占(唯一的拥有者)无开销(零开销抽象)模块私有资源、工厂模式返回值、RAII 句柄、局部容器存储共享(协同拥有者)有开销(控制块 + 原子计数)跨线程/跨模块共享对象(如)、异步回调上下文观察(不拥有对象)无强引用开销打破循环引用、定时器异步回调、对象缓存/观察者模式2.选型决策树需要管理一个动态对象的生命周期?│。
2026-09-13 16:16:22
476
3
原创 Linux网络编程实战2:TCP Socket 基础与实践
到这里,我们已经把底层的“脏活累活”梳理了一遍:从零碎的 Linux Socket API,到利用 RAII 思想将其封装为一个干净、安全的Socket类;并且我们通过“迎宾员与服务员”的模型,理清了accept()为什么要拆分出新的clientFd,顺水推舟地引出了现代网络框架中最为核心的事件驱动与回调机制。但故事到这里并没有结束。既然我们已经有了“专职服务员”(clientFd),也有了“呼叫铃”(事件驱动),那这位服务员在整个工作期间,应该如何管理自己手头的事情呢?
2026-09-10 20:57:22
422
2
原创 大小端知识点——验证自己的电脑是大端还是小端
1980 年,计算机科学家 Danny Cohen 把这个典故搬进了一篇论文,用来嘲讽当时计算机界为字节序争得不可开交的荒诞局面。想象你在记电话号码,大端派从区号开始写,小端派偏要从最后一位数字倒着写——两种方式都能还原出完整号码,但如果两个人事先没说好,拿到对方的纸条就完全看不懂了。在你电脑上是 4,但换个平台可能是 2、可能是 8——这个数字从来不是理所当然的。所以大端没有消失,它只是从你的桌面撤退到了数据中心、机房和海底光缆的另一端。有,而且活得好好的——只是不在你桌上。说明这个机器是小端机器。
2026-07-16 15:26:22
252
原创 Linux网络编程实战1.从五层模型到Socket编程(个人学习/复习使用 有错误欢迎指正)
数据链路层负责“这一跳送给谁”;网络层负责“最终送到哪里”;传输层负责“送给哪个程序,并保证如何送达”;应用层负责“这份数据到底是什么意思”。定义通信规则,让数据从单纯的二进制信息变成真正具有业务意义的消息。到这里,我们终于完整走完了一次数据的旅程。现在,让我们把前面的五层模型重新放回最开始的场景。打开地图,查看霍格沃兹城堡的位置。当我点击地图按钮时,游戏客户端需要向华纳服务器发送一个请求:“玩家请求打开当前地图数据。
2026-07-16 10:30:00
888
原创 C++第五课:STL容器——5.1string(个人整合学习复习使用,有错误欢迎指出)
大白话版本:想象一下,如果你要从井里打水,有两个选择:• 一次打一勺水,跑回家倒进水缸,再跑回来打下一勺• 拿一个水桶装很多勺水,等水桶满了再一次性倒进水缸显然第二种方式更高效!这里的buff就相当于那个水桶——一个临时的"中转站"。专业术语版本。
2025-10-14 00:43:46
945
1
原创 C++第四课:类和对象(个人学习/复习使用 有错误欢迎指正)
因为成员函数需要知道“我”到底是谁,而一个类可能有很多对象,用 this 指针来代表“当前这个”。Dog d1("豆豆");Dog d2("可乐");当你在 d1.setName("小豆") 里执行时,this 指向的是 d1 的地址;在 d2 调用时,this 指向的是 d2 的地址。
2025-07-21 17:20:41
2126
2
原创 数据结构笔记整理2:树(个人复习学习使用,如有错误欢迎指正感谢)C语言版本
树是一种非线性结构,由若干个结点构成,具有以下特点:•一个根节点,没有前驱结点•除根结点外,其余结点被分成 M(M>0)个互不相交的集合T1、T2、…、Tm,其中每一个集合Ti(1 <= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有。个或多个后继。因此,树是递归定义的。•没有环,层级关系明显,子树是不相交的•除了根结点外,每个结点有且仅有一个父结点•一棵N个结点的树有N-1条边二、树的基本术语•父结点:若一个结点含有子结点,则这个结点成为其子结点的父结点;
2025-06-19 23:45:13
2282
6
原创 数据结构个人笔记整理1:线性结构(个人复习学习使用,如有错误欢迎指正感谢)C语言版本
定义:线性表( linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。本质:数据按顺序排列,有明确的前后关系,每个元素只有唯一的前驱和后继(除了第一个和最后一个)•实现方式用连续内存存储,支持快速随机访问,访问时间O(1)插入和删除时,后续元素需整体移动,时间复杂度O(
2025-06-14 16:40:37
2080
原创 C++第三课 函数增强机制(个人学习&复习用,有错误感谢指正qwq)
函数是一段可以重复使用的代码块,它接受输入(参数),执行操作,然后返回结果(或不返回)我们不可能把所有的操作都堆在main函数里面,函数的存在让程序更模块化、清晰、可维护。•提前“告诉”编译器某函数存在,这就叫函数声明//声明•函数定义就是真正把这个函数的内容写出来,告诉编译器这个函数具体是怎么做事的返回值类型 函数名(参数列表){//函数体,写具体要做的事情return 返回值;⚠️注意事项:•函数声明一般写在前面或.h文件里面,只写函数声明,不写函数体。生命是承诺,定义是实现;
2025-06-01 18:30:10
158
原创 C++第二课:更优雅的输入输出——初识C++的IO流(个人学习&复习用,有错误感谢指正qwq)
这虽然简洁,但有几个主要的问题:1.:%d只能配int,写错了就崩了2.:输入要取地址符&,容易忘记3:scanf("%s",name)可能存在内存越界,输入过程会炸4.:输出内容+占位符分开,不直观(不符合人类阅读习惯)
2025-05-22 23:02:29
766
原创 C++第一课:第一个C++程序&命名空间(个人学习&复习用,有错误感谢指正qwq)
--大白话解释:你和同桌都叫“小明”,老师喊“小明”时你俩都站起来,场面就尴尬了……那该怎么办?给你们加个前缀:三年二班的小明四年一班的小明。
2025-05-15 22:24:05
683
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅