- 博客(201)
- 资源 (19)
- 收藏
- 关注
原创 【c++设计模式12】结构型4:装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你在不改变现有对象结构的情况下,动态地将责任(功能)附加到对象上。装饰模式通过以透明的方式扩展对象的功能,比继承更灵活。
2024-04-22 06:00:00 502
原创 【c++设计模式11】结构型3:组合模式(Composite Pattern)
组合模式(Composite Pattern)是一种结构型设计模式,通过将对象组合成树状结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性,可以一致地处理组合对象和叶子对象。
2024-04-18 16:21:05 918
原创 【c++设计模式10】结构型2:桥接模式(Bridge Pattern)
定义桥接模式(Bridge Pattern)定义了两个独立变化的维度,即抽象和实现,通过组合的方式将抽象部分和实现部分连接在一起,从而使得它们可以独立地进行扩展和变化。桥接模式通过将抽象部分的方法委派给实现部分,可以使得抽象部分和实现部分可以独立地进行演化。桥接模式通过组合而不是继承的方式实现了两个独立变化维度之间的解耦,提高了系统的灵活性。
2024-04-08 06:00:00 667
原创 【c++设计模式09】结构型1:适配器模式(Adapter Pattern)
适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而无法合作的类能够协同工作。
2024-04-01 06:00:00 1427
原创 【c++设计模式08】创建型6:原型模式(Prototype Pattern)
原型模式定义了一个原型接口,该接口用于复制现有对象以创建新对象,从而避免了昂贵的构建过程。使用原型模式,我们可以根据现有对象创建新对象,同时保持对象的类型和状态。浅拷贝:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。深拷贝:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。clone明显是深复制,clone出来的对象是是不能去影响原型对象的。
2024-03-25 06:00:00 1217
原创 【c++设计模式07】创建型5:创建者模式(Builder Pattern)
建造者设计模式是一种创建型设计模式,它允许你按照步骤构造复杂对象。该模式将对象的构建过程与其表示相分离,使得同样的构建过程可以创建不同的表示。
2024-03-18 06:00:00 730
原创 【c++设计模式06】创建型4:单例模式(Singleton Pattern)
单例模式保证一个类只有一个实例,并且提供一个全局访问点来获取该实例。单例模式是一种创建型设计模式,用于确保一个类只有一个实例。它适用于需要控制资源共享访问权限的场景。单例模式可以分为懒汉式和饿汉式两种实现方式,并且需要注意线程安全性,可以使用互斥锁或双重检查锁定来保证线程安全。
2024-03-11 06:00:00 33
原创 【c++设计模式14】结构型6:享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享对象来减少内存使用和提高性能。享元模式将对象分为两部分:内部状态(Intrinsic State)和外部状态(Extrinsic State)。其中,内部状态是可以共享的,而外部状态是不可共享的。
2024-03-05 19:51:18 660
原创 【c++设计模式05】创建型3:抽象工厂模式(Abstact Factory Pattern)
AbstractFactory 模式和 Factory模式的区别是初学(使用)设计模式时候的一个容易引起困惑的地方。实际上,AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提供创建接口,而 Factory模式是为一类对象提供创建接口或延迟对象的创建到子类中实现。并且可以看到,AbstractFactory模式通常都是使用 Factory 模式实现。
2024-03-01 19:28:14 644
原创 【c++设计模式04】创建型2:工厂方法模式(Factory Pattern)
简单工厂模式的优点是易于理解和实现,客户端只需要与工厂类进行交互,而不需要直接与具体产品类打交道。当需要添加新的产品类时,只需要修改工厂类即可,符合开闭原则。缺点是随着产品类的增加,工厂类的代码逻辑会变得越来越复杂,违反了单一职责原则。总结来说,工厂模式和简单工厂模式都是用于对象的创建,提供了一种封装对象创建过程的方式,使得客户端与具体对象的创建解耦。而简单工厂模式是工厂模式的一种简单形式,适用于对象较少且创建逻辑相对简单的情况。
2024-02-24 07:53:23 666
原创 【c++设计模式03】创建型1:简单工厂模式(Simple Factory Pattern)
并由实现该接口或继承该抽象类的具体工厂类负责实例化对象。在工厂模式中,客户端通过调用工厂类的方法来获取所需的对象,而无需直接实例化对象。工厂类根据不同的需求条件,使用不同的逻辑或算法创建相应的对象,隐藏了对象创建的具体细节。工厂模式可以有效地降低系统的耦合度,提高代码的可维护性和可扩展性。它符合面向对象设计原则中的开放封闭原则,即对扩展开放,对修改封闭。当需要新增一种产品时,只需添加相应的具体产品类和对应的工厂类,而无需修改已有的代码。常见的工厂模式包括。
2024-02-18 11:39:10 824
原创 【c++设计模式02】前言2:设计模式三原则
原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.csdn.net/article/details/133185304qq技术交流群:921273910。
2024-01-17 15:13:46 394
原创 【c++设计模式01】前言1:UML 类图
原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.csdn.net/article/details/133182698qq技术交流群:921273910面向对象设计主要就是使用UML的类图,类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。下面基于C++这门语言给大家讲一下UML类图的画法。
2024-01-10 19:54:16 866
原创 【cmake实战:番外】交叉编译——Linaro
本地编译本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译:比如,我们在 x86 平台上,编写程序并编译成可执行程序。这种方式下,我们使用 x86 平台上的工具,开发针对 x86 平台本身的可执行程序,这个编译过程称为本地编译。
2024-01-03 09:18:08 919
原创 【STL21】C++中的stringstream(字符串流)
stringstream是C++中非常有用的工具,可以方便地处理字符串的输入和输出。通过将字符串与流对象相关联,我们可以轻松地将字符串数据转换为其他类型(如整数或浮点数),或者将其他类型的数据转换为字符串。参考1、C++ STL 容器库 中文文档2、STL教程:C++ STL快速入门3、4、5、WIKI教程_C ++标准库_C++ Library -
2023-12-25 06:00:00 319
原创 【c++随笔17】C++ 中的 extern 关键字
我们知道,程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。在函数内定义的变量是局部变量,而在函数之外定义的变量则称为外部变量,外部变量也就是我们所讲的全局变量。它的存储方式为静态存储,其生存周期为整个程序的生存周期。全局变量可以为本文件中的其他函数所共用,它的有效范围为从定义变量的位置开始到本源文件结束。然而,如果全局变量不在文件的开头定义,有效的作用范围将只限于其定义处到文件结束。
2023-12-18 06:00:00 65
原创 【c++随笔16】reserve之后,使用std::copy会崩溃?
原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.csdn.net/article/details/134272501qq技术交流群:921273910。
2023-12-11 06:00:00 127
原创 【c++随笔15】c++常用第三方库
一、数据库相关:HDFS、libpq、SQLite、RocksDB、unixODBC、Nanobdc、Ignite; 二、网络通信相关: libcurl、libevent、libssh、mosquitto、nghttp2、libuv; 三、加密和安全相关: 1、OpenSSL四、序列化和数据格式相关: Protobuf、json(nlohmann)、Rapidjson、pugixml、Xlnt、Yamlcpp、Libxl:五、压缩compress\Minilzo、Snappy、zlib;
2023-12-04 06:00:00 883
原创 【c++随笔14】虚函数表
虚函数表是一个由虚函数组成的表格,用于实现动态绑定和多态性。每个包含虚函数的类都有自己的虚函数表,该表列出了该类及其所有基类的虚函数。当一个对象被创建时,它的类虚函数表也被创建,并且可以通过该对象的指针或引用来调用虚函数表中的函数。虚函数表是一种实现动态多态性的机制。每个包含虚函数的类都有一个虚函数表,其中存储着该类的虚函数地址。当通过基类指针或引用调用虚函数时,程序会根据对象的实际类型查找对应类的虚函数表,并调用正确的虚函数。// 基类Aclass A {public:// 基类B。
2023-11-27 06:00:00 447
原创 【c++随笔13】多态
我们查看《C++ Primer 第5版》第15.3章节 虚函数中的介绍(p537页)OOP的核心思想是多态性(polymorphism)。多态性这个词源自希腊语,其含义是“多种形式”。我们把具有继承关系的多个类型称为多态类型,因为我们能使用这些类型的“多种形式”而无须在意它们的差异。引用或指针的静态类型与动态类型不同这一事实正是C++语言支持多态性的根本所在。
2023-11-20 06:00:00 540
原创 【c++随笔11】面向对象和封装
面向对象编程是一种编程范式,它以对象作为程序的基本单元,将数据和操作捆绑在一起。每个对象都是一个独立的实体,具有自己的特征(数据成员)和行为(成员函数)。面向对象编程的核心思想是通过定义类来创建对象,从而模拟现实世界中的事物和关系。封装是面向对象编程的一个重要概念,它将数据和对数据的操作封装在一个类中。通过将数据成员声明为私有,封装确保数据只能通过类提供的公共接口进行访问和操作。封装提供了一种机制,用于隐藏数据的内部细节,从而增加代码的安全性、可维护性和可重用性。
2023-11-06 06:00:00 231
原创 【c++随笔10】C++模板和泛型编程
简介:模板和泛型编程是C++中强大而灵活的特性之一。通过使用模板,我们可以编写通用的代码,以处理不同类型的数据。本文将介绍C++ Primer 第5版中第16章的内容,涵盖模板的基本概念、函数模板、类模板、模板参数、成员模板和可变参数函数模板等主题,并提供相应的示例代码。
2023-10-30 06:00:00 54
原创 【c++随笔09】函数指针
函数指针:指向的是函数(而非对象)。和其他指针一样,函数指针指向某种特定类型。函数的类型由它的返回类型和形参共同决定,与函数名无关。该函数的类型是int(int,int)。想要声明一个可以指向该函数的指针,只需要用指针替换函数名即可//pf指向一个函数,该函数的参数是const int的引用,返回类型是bool类型从我们声明的名字开始观察,pf前面有个*,因此pf是指针;右侧,是形参列表,表示pf指向的是函数;左侧,发现函数的返回类型是double;
2023-10-23 06:00:00 94
原创 【c++随笔08】可变参数——va_list、va_start、va_end、va_arg
原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.csdn.net/article/details/131690070qq技术交流群:921273910当你在编写 C++ 函数时,有时候你会需要处理可变数量的参数。C++ 中提供了 头文件,其中包含了用于处理可变参数的函数和宏。本教程将向你介绍如何使用 来编写可变参数的函数。
2023-10-16 06:00:00 908 1
原创 【c++随笔07】常量、变量、static
我们通常将不需要被其他模块调用的全局变量或函数用 static 关键字来修饰,static 能够将全局变量和函数的作用域限制在当前文件中。
2023-10-02 05:30:10 131
原创 【c++随笔06】友元
友元(Friend)是C++中的一个重要概念,它允许某个函数或类访问其他类中的私有成员。友元被用于提供类之间的访问权限,使得某些函数或类能够绕过常规的访问控制机制来访问私有成员。友元在某些情况下非常有用,但使用不当可能会破坏封装性和数据的安全性。在C++中,友元可以被定义为全局函数、类、类的成员函数。友元关系必须在要访问的类中进行声明或定义。
2023-09-25 06:00:00 105
原创 【c++随笔05】C++ 内联函数的优势和使用方法
内联函数是一种优化技术,通过减少函数调用开销和提供编译器优化,可以显著提高程序的执行效率和性能。在使用内联函数时,我们需要注意合适的场景和使用方法,以充分发挥内联函数的优势。
2023-09-18 06:00:00 174
原创 【c++随笔04】宏
在 C++ 中,宏是一种预处理指令,用于在编译之前将代码文本替换为指定的内容。宏通常以 #define 开始,并且由一个标识符和一个代码片段组成。宏提供了一种机制,能够使你在编译期替换代码中的符号或者语句。当你的代码中存在大量相似的、重复的代码时,使用宏可以极大的减少代码量,便于书写。__FILE __当前源文件的路径名称;__FUNCTION__函数名称(包含类作用域),这里需要注意的是,如果是类的成员函数,还会将类名也打印,以标识作用域,形如:MyClass::Func;
2023-09-11 06:00:00 69
原创 【c++随笔03】构造函数、析构函数、拷贝构造函数、移动构造函数
构造函数的概念构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用。能够保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。能够保证对象被初始化。构造函数是特殊的成员函数,主要任务是初始化,而不是开空间。(虽然构造函数的名字叫构造)构造函数的函数名和类名是相同的构造函数无返回值构造函数可以重载会在对象实例化时自动调用对象定义出来。int m_day;Date d1;
2023-09-04 06:00:00 175
原创 【C++随笔02】左值和右值
完美转发(perfect forwarding)是C++11引入的概念,用于在函数模板中将参数按原样传递给另一个函数,同时保留其值类别(lvalue或rvalue)。它可以在保持精确性的同时避免不必要的复制或移动操作,提高代码的效率。完美转发通常与转发引用类型参数(如模板中的万能引用)一起使用,以实现泛型编程中的参数传递。在函数模板中,我们可以使用 std::forward 函数来进行完美转发。// 定义一个接收传入参数的函数i = 100;// 修改传入的左值参数。
2023-08-28 06:00:00 282
原创 【C++随笔01】联合体union —— 一种节省空间的类
定义union定义的语法如下:c++// ...其中,UnionName为该union类型的名称,unionMember1、unionMember2等为union的成员,可以是任何 C++ 数据类型(包括自定义类型),也可以是数组或指针。union的成员占用同一块内存空间,它们的大小取决于成员中占用内存最大的类型。可以使用.和->运算符来访问union中的成员变量。但需要注意的是,不同的成员变量共享同一段内存,因此只能同时访问一个成员变量// demo1int m_id;
2023-08-21 06:00:00 675
原创 【系统软件03】centos7安装和使用node-v18.16.0(centos7升级glibc 2.28)
linux环境下安装nodejs和npm的两个方法。
2023-08-14 06:00:00 6622
原创 【系统软件02】源码离线安装gcc
可以看到一共下载了这四个所需的软件gmp-6.1.0.tar.bz2、mpfr-3.1.4.tar.bz2、mpc-1.0.3.tar.gz、isl-0.18.tar.bz2。解决方案:同《 四、重新加载动态链接库》,把所在库的路径加入到ld.so.conf.d。这时系统使用的是系统自带的旧版本的gcc,解决方案如下。把原来的备份,重新生成软连接。译安装——(不建议使用)
2023-08-07 06:00:00 1183
原创 我的4周年创作纪念日
创作规划:未来将会推出的系列笔记有《c++设计模式》《数据结构和算法》《数据库》《c++自动化测试》职业规划:做一名合格的c++程序员和架构师,兼顾家庭和工作。今天是2023年8月1日,工作四年了,记录博客也四年了。提示:当前创作和你的工作、学习是什么样的关系。写下csdn官方给的吧。
2023-08-01 20:19:15 208
原创 【系统软件01】devtoolset离线安装gcc
SCL(Software Collections)是一个CentOS/RHEL Linux平台的软件多版本共存解决方案,为RHEL/CentOS Linux用户提供一种方便、安全地安装和使用应用程序和运行时环境的多个版本的方式,同时避免把系统搞乱。参考:1、Linux开发环境——SCL软件集2、转载:Centos7安装SCL源3、CentOS 使用 IUS / SCL 第三方软件源4、为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本。
2023-07-31 06:00:00 1680
原创 【并发编程二十三】linux系统,c++启动进程、杀进程、查询进程id
简介:在Linux系统中,使用C++编写程序可以通过多种方式控制进程,如启动程序、杀死进程和查询进程ID。本教程将详细介绍在Linux系统中使用C++的system函数、popen函数、fork函数以及相关命令的区别和用法。
2023-07-24 06:00:00 694
原创 【并发编程二十二】通过进程名字杀死进程TerminateProcess
并发编程系列,我们只加写了如何启动一个子进程,这个子进程可以自己退出,但是并没有讲解如何通过进程名字强杀进程,这里我们讲解下。并讲解下可能遇到的三个问题。
2023-07-17 06:00:00 596
原创 【编译、链接、装载十六】汇编与指针、汇编与new
简介:我们从预处理、编译、汇编、编译、链接、装载一路走到现在,一直在c语言的层面分析,原因还是这些知识太苦涩,理解时需要看下具体的反汇编代码,且c++的反汇编更难理解些,所以,c语言的入手比c++入手更简单和更好理解些。在这个系列的结尾,我们从汇编层面分析下c++ new的过程、c++类的初始化过程、类的成员函数调用过程。另外再从汇编层面看下c语言的指针是怎么工作的。
2023-07-11 06:00:00 362
原创 【编译、链接、装载十五】系统调用与API——printf源码分析
什么是系统调用在现代的操作系统里, 程序运行的时候, 本身是没有权利访问多少系统资源的。由于系统有限的资源有可能被多个不同的应用程序同时访问,因此, 如果不加以保护, 那么各个应用程序难免产生冲突。所以现代操作系统都将可能产生冲突的系统资源给保护起来, 阻止应用程序直接访问。这些系统资源包括文件、 网络、 IO、 各种设备等。举个例子, 无论在Windows下还是Linux下, 程序员都没有机会擅自去访问硬盘的某扇区上面的数据, 而必须通过文件系统;
2023-07-04 06:00:00 217
Qt教程11Qt网络通信TCP-qt简单实现聊天qq
2024-04-02
【cmake实战十一】com组件方法的简单实现
2022-10-03
【cmake实战十】c++从动态库(dll)导出类
2022-09-17
项目管理——项目整合管理_zjx_2021.8.01.pptx
2021-08-06
EasyOPC_UA.zip
2021-06-11
EasyOPC_DA.zip
2021-06-11
opcworkshop_03.rar
2021-06-11
OfficeRegClean
2021-04-06
beijing_china.osm2pgsql-1-geojson.rar
2021-03-01
es_clean_demo.rar
2020-09-03
code:Enhancing low light images using near infrared flash images
2019-03-18
code:AN IMPROVED NON-LOCAL DENOISING ALGORITHM
2019-01-21
Cross-Field Joint Image Restoration via Scale Map
2019-01-21
WLS_Filter
2019-01-21
BM3D code:Image denoising by sparse 3D transform-domain collaborative ltering
2019-01-21
Image Smoothing via L0 Gradient Minimization
2019-01-21
计算BIQE代码:A feature-enriched completely blind image quality evaluator
2019-01-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人