- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 简单工厂模式和策略模式
本文通过电影片场道具管理的生动案例,讲解简单工厂模式和策略模式的设计思想与实现。简单工厂模式通过"道具工厂"封装对象创建过程,实现调用者与具体产品的解耦,但存在违反开闭原则的缺点。策略模式则用于动态切换算法策略,两者结合可发挥更大威力。文章包含UML类图解析和现代C++代码实现,帮助初学者理解设计模式的实际应用场景和实现方法。
2026-04-24 16:58:36
389
原创 一文看懂UML的各种关系
UML关系总结 本文系统讲解了UML类图中的6种核心关系及其C++实现: 关联关系(Association) - 对象间临时使用关系,用指针实现(如人与摩托车) 依赖关系(Dependency) - 方法参数或返回值的临时关系 聚合关系(Aggregation) - 整体与部分可分离的关系(如车队与摩托车) 组合关系(Composition) - 强所属关系(如发动机与摩托车) 泛化关系(Generalization) - 继承关系 实现关系(Realization) - 接口实现 关键区别在于对象间生命周
2026-04-24 16:10:26
449
原创 常量指针还是指针常量——const到底修饰了谁?
本文深入解析C++中const修饰指针和引用的用法。通过右左法则,从变量名开始,先看右边再看左边,const修饰其左边最近的内容。文章详细分析了const int*、int* const等常见指针声明的区别,并提供了速查表:const在*左边修饰所指对象,在右边修饰指针本身。对于引用,&表示引用到前面整个类型。最后用口诀总结:const左边修饰对象,右边修饰指针,&引用整个类型。通过图文并茂的方式,帮助读者清晰理解const在指针和引用中的修饰规则,解决相关编程困惑。
2025-10-04 16:13:35
364
原创 构建工具链深度解析:GCC、G++、CMake、Make、QMake 和 CMakeLists.txt
这篇文章详细解析了C/C++项目构建工具链中的关键组件及其关系,主要包括: 编译器层:GCC/G++作为基础编译器,负责源代码到机器码的转换 构建工具层: Make:传统构建执行工具 QMake:Qt专用构建生成器 CMake:现代跨平台构建系统生成器 配置文件:CMakeLists.txt作为CMake的构建规则描述文件 文章通过对比表格展示了各工具的特性差异,并推荐了现代C++项目的最佳实践: 小型项目可直接使用G++或Make Qt项目推荐CMake 跨平台大型项目首选CMake 强调CMake已成为
2025-09-28 09:00:00
1169
原创 C++朝花夕拾-`assert`
C++中的assert是调试断言工具,用于开发阶段捕捉程序设计错误(如参数检查、不变式验证),通过条件判断立即终止程序并输出错误信息。它与异常处理机制不同:assert针对"绝不该发生"的程序错误,在Release模式下会被完全移除;而异常处理用于应对运行时可能发生的意外情况(如用户输入错误、文件缺失),可捕获恢复且始终存在。assert遵循"Fail Fast"原则,适用于函数前置条件、指针有效性检查等场景,但不应用于用户输入验证或资源检查。大型项目常结合自定义断言
2025-09-27 20:00:00
1433
原创 Linux系统离线安装软件方法
本文介绍了Linux系统离线安装软件的两种方法:跨架构安装(如x86下载arm64包)和同架构安装。跨架构安装需先添加目标架构支持,使用apt-rdepends分析依赖并批量下载;同架构安装则直接分析依赖后下载。文中特别解释了dpkg --add-architecture命令是永久增加而非切换架构支持,可通过--remove-architecture移除。两种方法均需创建目录集中管理依赖包,最后使用dpkg命令安装目标软件包。
2025-09-26 09:00:00
493
原创 详解 C++ unique_ptr:独占式智能指针
是一个类模板,其定义位于<memory>头文件中。它有两种形式:一种用于管理单个对象,另一种用于管理动态分配的数组。第二个模板参数Deleter是一个可选参数,用于指定一个可调用对象(函数对象或函数指针),该对象定义了如何销毁被管理的资源。这个类型在unique_ptr内部被别名为。默认情况下,Deleter是,它简单地调用delete来释放内存。然而,通过提供自定义的删除器,unique_ptr可以管理任何需要特殊清理逻辑的资源。Deleter必须是一个可调用对象,能够接受一个类型的参数。将。
2025-09-25 14:10:51
1294
原创 C++朝花夕拾-异常机制
本文介绍了C++异常机制的核心概念。传统错误处理方式(如返回错误码)存在易忽略、设计混乱等问题。C++通过throw、try、catch三关键字提供异常处理方案,能在程序运行时捕获"意外情况"并优雅恢复。异常会沿调用栈向上传播(栈展开),直到被捕获。文章推荐使用标准异常类(如std::runtime_error)或自定义异常类,并强调RAII原则(通过对象生命周期管理资源)对异常安全的重要性。同时指出应避免在析构函数中抛出异常,以免程序终止。
2025-09-24 19:15:00
1691
原创 C++朝花夕拾-[特殊字符] 浅拷贝 vs [特殊字符]️ 深拷贝
🌊 浅拷贝 vs 🏗️ 深拷贝 | 核心解析 本质区别:浅拷贝复制指针地址(共享内存),深拷贝复制指针内容(独立内存)。 风险点:默认拷贝是浅拷贝,若类含指针成员会导致重复释放内存(程序崩溃)。 解决方案:手动实现拷贝构造函数和赋值运算符,为指针成员分配新内存(深拷贝)。 现代实践:优先使用智能指针(如 unique_ptr)或值语义对象(如 std::string),避免手动深拷贝。 📌 关键口诀:资源需独占时必用深拷贝,"三五法则"提醒你补全析构、拷贝和赋值逻辑! 示例:学生类
2025-09-23 09:30:00
324
原创 C++朝花夕拾-重载 vs 重写
摘要:C++中重载(Overload)和重写(Override)有本质区别。重载是在同一作用域内定义同名但参数不同的函数,通过编译时静态绑定实现;重写是在继承关系中派生类覆盖基类的虚函数,通过运行时动态绑定实现多态。关键区别在于:重载要求参数列表不同而重写要求完全一致;重载不需要virtual关键字而重写必须使用;重载发生在同类中,重写需要继承关系。C++11建议使用override关键字明确重写意图,避免错误。正确理解这两个概念是掌握C++多态机制的基础。
2025-09-22 15:28:38
481
原创 c++朝花夕拾-using关键字用法
C++中的using关键字功能强大,主要用于5种场景:1)引入命名空间成员(推荐单成员引入而非整个命名空间);2)定义类型别名(C++11起替代typedef,支持模板别名);3)在派生类中引入基类成员解决函数隐藏问题;4)改变继承成员的访问权限;5)在模板中引入依赖基类成员解决编译错误。最佳实践包括优先使用类型别名、解决函数重载隐藏、避免在头文件使用整个命名空间等。using使代码更简洁安全,特别是其模板别名和解决继承问题的能力是独特优势。
2025-09-22 14:47:37
351
原创 c++朝花夕拾-形参VS实参
C++中形参(形式参数)与实参(实际参数)是函数调用的核心概念。形参是函数定义时的占位符,声明所需数据类型;实参是调用时传递的具体值或变量。二者主要区别在于:形参存在于编译期,具有局部作用域;实参存在于运行期,影响外部数据。C++提供三种参数传递方式:值传递(复制值)、引用传递(直接操作原变量)和指针传递(通过地址修改)。使用场景包括:值传递保护原始数据,引用/指针传递修改外部变量。需注意参数匹配、const修饰及函数重载等特殊情况。合理选择传递方式能优化性能并确保代码安全。
2025-09-21 00:15:00
468
原创 C++朝花夕拾-缺省
C++ 中的“缺省”机制 核心概念 C++中的"缺省"指预设默认值或行为的机制,在用户未显式指定时自动生效,用于简化代码、提高灵活性。 主要应用场景 函数默认参数:从右向左连续定义,避免重载歧义 类成员默认初始化(C++11+):减少构造函数负担 模板默认参数:满足模板约束条件 特殊成员函数:使用= default显式生成默认版本 标准库行为:容器构造、算法参数等默认设置 注意事项 默认参数变更可能破坏API兼容性 默认参数必须是编译期常量 需权衡性能与可读性 头文件中声明默认参数 最佳
2025-09-20 04:06:15
1925
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅