自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 C++ 编译过程

C++编译过程深度解析:从源码到可执行文件的全景指南 C++编译过程包含预处理、编译、汇编和链接四个关键阶段: 预处理:宏展开、头文件包含,生成纯文本翻译单元 编译:进行语法/语义分析,实例化模板,生成优化后的汇编代码 汇编:将汇编指令转为二进制目标文件,含未解析符号 链接:合并多目标文件,解析符号引用,生成可执行文件 核心特性: 模板在编译期实例化,导致代码膨胀但运行高效 编译期(模板)与运行期(虚函数)形成C++的双重多态机制 现代优化:预编译头文件、C++20模块化大幅提升编译速度 工程实践需注意符号

2026-06-30 14:09:42 217

原创 C++ 封装、继承与多态

本文深入解析C++面向对象编程的三大核心特性:封装、继承与多态。封装通过访问控制实现数据隐藏,确保系统安全性和模块化;继承建立类层次关系,支持代码复用,但需遵循里氏替换原则;多态则提供运行时灵活性,包括静态多态(重载、模板)和动态多态(虚函数)。文中通过银行账户、继承关系等代码示例,展示了这些特性的实际应用,并讨论了PIMPL惯用法、虚继承等高级技术。理解这三者的协同关系是成为优秀C++开发者的关键。

2026-06-30 11:50:31 250

原创 C++ SOLID 原则(下):接口隔离与依赖倒置

摘要:C++ SOLID原则(下)重点解析接口隔离原则(ISP)和依赖倒置原则(DIP)。 ISP原则要求避免"胖接口",通过拆分细粒度接口(如将多功能办公设备接口拆分为IPrinter、IScanner等独立接口)确保实现类只需关注必要功能。C++多重继承特性可优雅实现这一原则。 DIP原则通过抽象接口解耦高层模块与底层实现(如业务逻辑通过IDatabase接口操作数据库,而非直接依赖MySQL/PostgreSQL)。依赖注入方式使系统更灵活,符合开闭原则。 这两个原则共同构建了松耦合、高扩展的C++系

2026-06-30 10:12:41 237

原创 C++ SOLID 原则(上):单一职责、开闭原则与里氏替换

C++ SOLID原则(上)摘要 SOLID原则是面向对象设计的核心准则,本文重点解析前三个原则: 单一职责原则(SRP):每个类应仅承担一个职责。通过将多功能"上帝类"拆分为专注单一职责的独立模块(如EmployeeRepository、ReportGenerator等),提高内聚性和可维护性。 开闭原则(OCP):对扩展开放,对修改关闭。通过抽象接口(如IShape)和多态机制,使得新增功能(如Triangle类)只需扩展而不需修改稳定代码(如calculateTotalArea函数)。 里氏替换原则(

2026-06-30 10:11:09 325

原创 C++ 工厂模式与抽象工厂模式

摘要: 工厂模式是C++中核心的创建型设计模式,通过将对象创建与使用分离来解决紧耦合问题。文章深入探讨了三种形态: 简单工厂:通过参数决定产品类型,适用于简单场景但违反开闭原则; 工厂方法:通过子类决定具体产品,符合开闭原则,适合单一产品扩展; 抽象工厂:处理产品族创建(如跨平台UI控件),实现多系列产品的解耦。 文中结合现代C++特性(智能指针、移动语义)给出了工业级实现代码,展示了如何通过工厂模式提升代码的灵活性、可测试性和可维护性。

2026-06-29 16:38:02 195

原创 C++ 配置与策略模式

文章摘要: C++中的策略模式与配置机制结合形成强大的运行时行为扩展体系。策略模式通过虚函数多态、std::function函数式编程和编译期模板三种方式实现算法封装和动态切换。配置管理则通过层级化设计(硬编码默认值、配置文件、环境变量等)实现数据驱动的系统行为控制。两者协同工作,策略模式提供行为扩展点,配置机制提供运行时参数,共同构建高内聚低耦合的可扩展架构。文中展示了经典策略模式实现、轻量级函数式方案和模板编译期策略,以及结合nlohmann/json的配置管理实践。

2026-06-29 16:34:53 206

原创 C++ 模板与泛型编程

准则:模板的定义通常必须写在头文件中(除非显式实例化),因为编译器在实例化时需要看到完整蓝图。运行时世界:处理业务逻辑、动态数据、IO交互,使用继承和多态。编译时世界:处理类型计算、泛型算法、零开销抽象,使用模板和编译期计算(元编程)。模板是 C++ 独有的、面向编译器编程的语言。掌握模板意味着你不仅能用 C++ 写业务代码,更能写出像STLEigen(线性代数库)、Boost这样工业级的基石库。它通过编译时生成代码的机制,完美支持了策略注入类型扩展和零开销抽象。

2026-06-29 15:16:23 241

原创 C++ STL(标准模板库)

STL是C++的灵魂。它证明了代码可以极致的通用(适用所有类型),同时保持极致的性能(零开销抽象)。掌握STL不仅仅是记住vector和sort容器管理资源,迭代器解耦访问,算法实现逻辑。使用Lambda和函数对象注入行为,实现策略定制。拥抱,用现代风格编写更具可读性的流式代码。牢记迭代器失效和ABI兼容性两大红线。在C++的世界里,STL就是那套万能积木。无论是构建高性能服务器、游戏引擎,还是数据处理管道,熟练运用STL并理解其底层原理,是区分“C++初级使用者”与“C++架构师”的分水岭。

2026-06-29 11:20:29 200

原创 C++ 插件机制

接口必须不包含任何与编译器实现相关的细节(如STL容器跨边界传递需谨慎,见后文难点)。此处使用纯虚类和简单的C风格字符串保持兼容性。// 插件信息结构体(内存布局标准,不包含STL)// 核心插件接口(抽象类)public:// 生命周期方法// 加载资源// 释放资源// 初始化业务// 获取插件元数据// 业务功能示例// 导出的工厂函数类型(用于创建和销毁插件实例)// 注意:使用 __cdecl 调用约定保证跨编译器兼容(或在Windows上明确指定)

2026-06-29 11:03:29 242

原创 C++ 继承与接口

C++继承与接口核心解析 C++通过继承(IS-A关系)和抽象类(模拟接口)实现面向对象编程。继承分为公有/保护/私有三种,其中公有继承最常用,用于代码复用和多态。接口通过纯虚函数类实现,强调契约而非实现。关键区别: 继承侧重代码复用,接口定义行为规范 虚函数实现多态,需注意虚析构 菱形继承需用虚继承解决,但增加复杂度 接口类应遵循单一职责,避免"胖接口" 最佳实践:优先使用组合而非复杂继承,接口应精简专注,基类析构必须声明为virtual。

2026-06-27 16:57:00 234

原创 C++ 模块化设计

本文介绍了C++模块化设计的概念、实现方式和实践原则。主要内容包括: 模块化定义:将系统拆分为独立、可复用的模块,通过清晰接口交互,隐藏实现细节。 实现方式: 传统头文件/源文件分离 C++20引入的module语法(改进隔离性和编译速度) 命名空间逻辑划分 动态库/静态库物理隔离 设计原则: 高内聚低耦合 最小接口和稳定接口 按功能、分层或变更频率划分模块 设计模式:外观模式、中介者模式、观察者模式等用于模块解耦。 通信机制:直接调用、回调、消息队列等方式实现模块间交互。 扩展性:模块化为继承、插件、模板

2026-06-27 15:08:20 264

原创 如何在c++中使用MySQL

c++中如何使用MySQL

2026-05-23 09:34:09 347

原创 防抖和节流的作用

qt c++ 防抖和节流的作用

2026-03-30 13:50:48 278

原创 qt c++ 局域网聊天小工具

dingChat是一个基于Qt框架开发的轻量级局域网即时通信系统,包含服务器和客户端组件。系统支持用户注册/登录、在线状态同步和私聊功能,采用TCP长连接通信和INI文件存储用户数据。技术特点包括Qt网络编程、C++17实现、纯代码界面设计以及自定义文本协议。

2026-03-20 11:22:53 283

原创 c/c++内存复制

c/c++内存复制

2026-03-20 10:55:33 389

原创 【无标题】

指针函数和函数指针的区分

2026-03-20 10:49:06 171

原创 认识 ‘using namespace‘

摘要:本文详细介绍了C++中using namespace指令的使用方法、场景和注意事项。

2026-02-05 16:48:41 202

原创 基于观察者模式的ISO C++信号槽实现

本文实现了一个符合ISO C++标准的信号槽系统,采用观察者模式设计。核心包括: Connection类管理连接生命周期,支持移动语义和自动断开 SlotBase作为抽象槽接口,派生出FunctionSlot(普通函数)和MemberFunctionSlot(成员函数)两种实现 Signal类作为被观察者,提供线程安全的连接管理(使用递归互斥锁)和信号发射功能 系统特点: 支持普通函数、成员函数和lambda表达式连接 防止重入信号发射 线程安全设计 使用现代C++特性(移动语义、智能指针等) 不依赖Qt框

2026-01-10 10:56:48 387

原创 【windows系统】栈上分配内存大于1MB导致系统崩溃

主要方法:编译时设置:通过编译器链接选项运行时调整:使用 setrlimit (Linux/Mac)线程特定:创建具有大栈的新线程建议: 虽然技术上可行,但在生产代码中谨慎使用大栈分配,优先考虑堆分配或专用大栈线程,以避免潜在的系统资源问题。

2025-10-22 14:51:55 1114

原创 Linux之find命令

需求命令示例查找所有目录按名称查找(精确)按名称查找(模糊)忽略大小写限制搜索深度查找空目录按权限查找删除找到的空目录。

2025-08-27 13:53:34 668

原创 qt c++ QTableWidget

本文详细介绍了Qt中的QTableWidget控件接口,包括:1.基本设置和行列管理;2.单元格内容操作;3.选择和编辑控制;4.表头管理;5.排序搜索功能;6.视觉外观设置;7.拖放操作;8.信号接口等核心功能。同时提供了完整示例代码,展示了表格创建、数据填充、信号连接等典型用法。文章还特别强调了性能优化、内存管理和线程安全等重要注意事项,是使用QTableWidget的全面参考指南。

2025-08-27 12:01:35 754

原创 qt c++ 进程和线程

在Qt C++开发中,进程(Process)和线程(Thread)是两种不同的并发模型,各有适用场景和实现方式。通过合理选择进程和线程模型,可以在保证程序稳定性和安全性的同时,充分利用多核CPU资源,提升应用性能。,每个进程拥有独立的地址空间、文件描述符、环境变量等。进程间通信(IPC)需要显式机制。,同一进程内的线程共享地址空间和资源。提供线程支持,需注意线程安全。

2025-03-10 15:30:00 1122

原创 qt c++线程中的同步和异步

通过合理选择同步机制和异步模式,可以构建高效、响应迅速的Qt多线程应用。将耗时操作移至后台线程,避免阻塞主线程(如GUI线程)。用于协调多个线程对共享资源的访问,避免竞态条件。所有UI更新应在主线程完成,通过信号槽传递结果。管理对象生命周期,确保对象在正确线程析构。

2025-03-10 15:00:00 2008

原创 实际开发中实现一个全局日志功能

在实际开发中,全局日志功能是系统的重要组成部分。通过合理设计日志级别、输出目标、日志格式和日志管理器,可以实现一个高效、灵活且易于维护的日志系统。同时,通过扩展日志轮转、异步日志和网络日志等功能,可以进一步提升日志系统的性能和实用性。

2025-03-10 10:20:43 715

原创 Qt C++ 实际开发中宏编译的运用

宏编译在Qt C++开发中具有广泛的应用场景,特别是在跨平台开发、调试信息控制、功能开关和编译器兼容性方面。通过合理使用宏编译,可以提高代码的灵活性和可维护性。然而,也需要注意宏编译的缺点(如可读性差、调试困难等),并遵循最佳实践以确保代码的质量。在实际开发中,宏编译与Qt框架的其他特性(如信号槽机制、元对象系统)结合使用,可以构建高效、健壮的跨平台应用程序。

2025-03-10 10:10:44 1507

原创 模板函数在实际大型开发中的应用

private:public:模板函数是C++泛型编程的核心工具,在大型开发项目中具有广泛的应用场景。通过合理使用模板函数,可以提高代码的复用性、灵活性和性能。然而,也需要注意其潜在的缺点(如编译时间增加、代码膨胀等),并遵循最佳实践以确保代码的可维护性和可读性。在实际开发中,模板函数与STL、RAII、智能指针等技术结合使用,可以构建高效、健壮的大型软件系统。

2025-03-10 09:30:08 1064

原创 PIMPL模式

PIMPL模式是一种强大的设计模式,特别适合需要隐藏实现细节、减少编译依赖或提高二进制兼容性的场景。尽管它增加了代码的复杂性,但在大型项目或库开发中,它的优势往往超过了缺点。

2025-03-10 09:20:12 762

原创 【c++】 inline 内联函数简单了解

inline是一个真正的函数,通常定义在头文件里面,编译器在处理源文件的时候可以直接看到函数的定义,用于定义代码简单且频繁调用的函数,只需要简单标记为inline,使用的时候编译器会尝试将函数的代码直接插入到每个调用点,而不是通过常规的函数调用来执行。就不得不提一下c语言里面的宏了,宏函数会在预处理时替换展开,进而提升程序的执行效率,but宏定义展开呢不会进行类型检查,这样就会导致宏函数实现如果太复杂就容易出错并且很难调试,所以c++引入了内联函数。跟普通函数一样可以在编译器中看到,可以单步执行,调试方便。

2024-12-12 11:08:55 468

原创 设计模式(c++)

设计模式通过定义抽象的结构和行为来解决具体的开发问题。它们可以提高代码的可复用性、灵活性和可维护性。合理运用设计模式能使代码更加简洁、易读和易扩展。

2024-10-17 10:28:35 1038

原创 常见的排序算法

冒泡排序、选择排序、插入排序适用于小规模、近乎有序的数据。归并排序、快速排序、堆排序适用于大规模、无序的数据。

2024-10-17 09:46:05 1176

原创 QT信号和槽

Qt 的信号和槽(Signals and Slots)机制是其最具特色和强大的功能之一,它用于对象之间的通信,使得组件之间的交互变得简单而高效。

2024-09-04 08:30:51 1163

原创 UML+OO原则

在C++编程中,UML(Unified Modeling Language,统一建模语言)和面向对象(OO,Object-Oriented)设计原则是设计和实现高质量软件系统的关键工具。以下是如何在C++中应用UML和面向对象原则的详细介绍。

2024-07-23 15:59:44 882

原创 C++容器详解

C++容器是强大且多样化的数据结构库,选择合适的容器可以大大提高程序的效率和可维护性。理解每个容器的特性和适用场景是编写高效C++代码的关键。

2024-07-17 22:49:20 1174

原创 C++函数重载详解

函数重载是一种使代码更具可读性和灵活性的重要特性。它允许在同一作用域内定义多个同名函数,并通过参数的个数和类型区分这些函数。在设计函数重载时,要注意避免因参数类型过于接近而导致的调用混淆,确保函数重载能够清晰地表达不同的功能。

2024-07-14 22:49:54 937

原创 c++多态详细学习

C++中的多态性是通过继承、虚函数和纯虚函数实现的。它允许在运行时根据对象的实际类型调用相应的方法,从而提高代码的灵活性和可扩展性。在设计面向对象系统时,多态性是一个强大的工具,可以帮助你实现更优雅和可维护的代码结构。

2024-07-14 22:42:57 957

原创 C++函数模板学习

c++函数模板

2024-07-10 23:25:28 1150

原创 C语言文件操作

每个示例在打开文件后,都检查文件指针是否为空,确保文件成功打开,并在完成操作后关闭文件。// 以只写的方式打开文件,如果文件不存在则创建,否则文件存在则追加。// 使用fopen函数打开或者创建文件,返回文件指针。// 使用fgetc从文件中逐字符读取内容。// 通过fputc函数向文件写入字符。// 去除可能的换行符。// 从文件中读取一行内容。// 打开文件以只读方式。// 以只写方式打开文件。// 打开文件以只读方式。// 以只写方式打开文件。// 逐行读取文件内容。// 向文件写入内容。

2024-06-05 22:20:59 714

原创 C语言面试题(拓展)

( x ) 表示大骆驼的数量(每只大骆驼可以背3筐土豆)。( y ) 表示中骆驼的数量(每只中骆驼可以背2筐土豆)。( z ) 表示小骆驼的数量(每2只小骆驼可以背1筐土豆,所以一只小骆驼相当于0.5筐)。

2024-06-05 22:15:12 706

原创 C语言自定义类型

结构体在C语言中经常使用,typedef可以简化结构体的使用。​// 使用typedef定义结构体别名int x;int y;} Point;​// 使用结构体别名声明变量​​return 0;枚举类型用于定义一组命名的整数常量,使用typedef可以简化枚举类型的声明和使用。​// 使用typedef定义枚举类型别名RED,GREEN,BLUE} Color;​// 使用枚举类型别名声明变量​​。

2024-06-02 21:41:09 794

原创 C语言结构体

结构体的定义格式如下:struct 结构体名称 {数据类型 成员1;数据类型 成员2;// 更多成员以下是一个定义表示点(Point)的结构体的示例:​// 定义结构体Pointint x;int y;结构体是C语言中非常重要的数据类型,可以帮助你组织和管理复杂的数据。通过定义结构体、声明结构体变量、使用结构体指针和typedef,你可以高效地处理各种复杂的数据结构。

2024-06-02 21:34:02 995

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除