- 博客(210)
- 资源 (19)
- 收藏
- 关注
原创 【c++设计模式22】行为模式7:策略模式(Strategy Pattern)
原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.csdn.net/article/details/132920283qq技术交流群:921273910# 一、定义策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。客户端代码在运行时选择所需的算法。
2024-07-22 06:00:00 875
原创 【c++设计模式21】行为模式6:观察者模式(Observer Pattern)
观察者模式是一种行为型设计模式,它建立了对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,所有依赖它的对象都会自动收到通知并更新。
2024-07-15 12:45:57 96
原创 【c++设计模式20】行为模式5:备忘录模式(Memento Pattern)
备忘录模式(Memento Pattern)是一种行为型设计模式,它通过捕获一个对象的内部状态,并在该对象之外保存这个状态,从而在需要时可以将该对象恢复到原先保存的状态。备忘录模式实现了在不破坏封装性的前提下,对对象的状态进行备份和恢复。
2024-07-07 13:28:26 129
原创 【c++设计模式19】行为模式4:中介者模式(Mediator Pattern)
中介者模式定义了一个中介者接口(Mediator),该接口包含了协调多个对象之间的方法。具体中介者类(Concrete Mediator)实现了中介者接口,并且对多个相关对象之间的交互进行控制。每个相关对象(Colleague)都包含一个指向中介者对象的引用,并且在需要与其他相关对象通信时,通过中介者对象来进行交互。
2024-06-24 06:00:00 987
原创 【c++设计模式18】行为模式3:迭代器模式(Iterator Pattern)
迭代器模式定义了一个迭代器接口(Iterator),该接口包含了对容器对象(如列表或集合)进行遍历的方法。具体容器对象(Concrete Collection)实现了迭代器接口,并且提供了创建迭代器对象的方法。迭代器对象(Iterator Object)封装了对容器对象的访问和遍历逻辑。
2024-06-17 06:00:00 676
原创 【c++设计模式17】行为模式2:命令模式(Command Pattern)
命令模式定义了一个抽象命令(Command)接口和具体命令(Concrete Command)类,每个具体命令类都实现了抽象命令接口。命令对象包含了执行操作的方法,将请求的发送者(Invoker)和接收者(Receiver)解耦,使得请求的发送者不需要知道请求的处理细节。请求的发送者只需要通过调用命令对象的执行方法来触发请求的处理。
2024-06-05 18:20:47 724
原创 【c++设计模式16】行为模式1:责任链模式(Chain of Responsibility)
责任链模式(Chain of Responsibility Pattern)定义了一个抽象处理者(Handler)接口和多个具体处理者(Concrete Handler)类,每个具体处理者都包含对下一个处理者的引用。当请求发生时,从链的头部开始,依次向下传递,直到有一个具体处理者能够处理该请求为止。责任链模式将请求的发送者和接收者解耦,使多个对象都有机会处理请求,而不用显式地指定接收者。
2024-05-13 06:00:00 547
原创 【c++设计模式15】结构型7:代理模式(Proxy Pattern)
代理模式(Proxy Pattern)是一种结构型设计模式,它提供了一个代理类来控制对于原始对象的访问。代理类和原始类实现相同的接口,客户端通过代理类间接地访问原始对象,从而可以在不改变原始对象的情况下,通过扩展代理类来添加额外的功能或控制访问。
2024-05-06 09:19:16 694
原创 【c++设计模式13】结构型5:外观模式(Facade Pattern)
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简化的接口,用于访问复杂系统中的一组接口。外观模式通过创建一个高层次的接口,封装了底层系统的复杂性,使得客户端可以更加方便地使用系统。
2024-04-29 06:00:00 1664
原创 【c++设计模式12】结构型4:装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你在不改变现有对象结构的情况下,动态地将责任(功能)附加到对象上。装饰模式通过以透明的方式扩展对象的功能,比继承更灵活。
2024-04-22 06:00:00 538
原创 【c++设计模式11】结构型3:组合模式(Composite Pattern)
组合模式(Composite Pattern)是一种结构型设计模式,通过将对象组合成树状结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性,可以一致地处理组合对象和叶子对象。
2024-04-18 16:21:05 950
原创 【c++设计模式10】结构型2:桥接模式(Bridge Pattern)
定义桥接模式(Bridge Pattern)定义了两个独立变化的维度,即抽象和实现,通过组合的方式将抽象部分和实现部分连接在一起,从而使得它们可以独立地进行扩展和变化。桥接模式通过将抽象部分的方法委派给实现部分,可以使得抽象部分和实现部分可以独立地进行演化。桥接模式通过组合而不是继承的方式实现了两个独立变化维度之间的解耦,提高了系统的灵活性。
2024-04-08 06:00:00 705
原创 【c++设计模式09】结构型1:适配器模式(Adapter Pattern)
适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而无法合作的类能够协同工作。
2024-04-01 06:00:00 1549 1
原创 【c++设计模式08】创建型6:原型模式(Prototype Pattern)
原型模式定义了一个原型接口,该接口用于复制现有对象以创建新对象,从而避免了昂贵的构建过程。使用原型模式,我们可以根据现有对象创建新对象,同时保持对象的类型和状态。浅拷贝:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。深拷贝:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。clone明显是深复制,clone出来的对象是是不能去影响原型对象的。
2024-03-25 06:00:00 1242
原创 【c++设计模式07】创建型5:创建者模式(Builder Pattern)
建造者设计模式是一种创建型设计模式,它允许你按照步骤构造复杂对象。该模式将对象的构建过程与其表示相分离,使得同样的构建过程可以创建不同的表示。
2024-03-18 06:00:00 770
原创 【c++设计模式06】创建型4:单例模式(Singleton Pattern)
单例模式保证一个类只有一个实例,并且提供一个全局访问点来获取该实例。单例模式是一种创建型设计模式,用于确保一个类只有一个实例。它适用于需要控制资源共享访问权限的场景。单例模式可以分为懒汉式和饿汉式两种实现方式,并且需要注意线程安全性,可以使用互斥锁或双重检查锁定来保证线程安全。
2024-03-11 06:00:00 56
原创 【c++设计模式14】结构型6:享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享对象来减少内存使用和提高性能。享元模式将对象分为两部分:内部状态(Intrinsic State)和外部状态(Extrinsic State)。其中,内部状态是可以共享的,而外部状态是不可共享的。
2024-03-05 19:51:18 689
原创 【c++设计模式05】创建型3:抽象工厂模式(Abstact Factory Pattern)
AbstractFactory 模式和 Factory模式的区别是初学(使用)设计模式时候的一个容易引起困惑的地方。实际上,AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提供创建接口,而 Factory模式是为一类对象提供创建接口或延迟对象的创建到子类中实现。并且可以看到,AbstractFactory模式通常都是使用 Factory 模式实现。
2024-03-01 19:28:14 667
原创 【c++设计模式04】创建型2:工厂方法模式(Factory Pattern)
简单工厂模式的优点是易于理解和实现,客户端只需要与工厂类进行交互,而不需要直接与具体产品类打交道。当需要添加新的产品类时,只需要修改工厂类即可,符合开闭原则。缺点是随着产品类的增加,工厂类的代码逻辑会变得越来越复杂,违反了单一职责原则。总结来说,工厂模式和简单工厂模式都是用于对象的创建,提供了一种封装对象创建过程的方式,使得客户端与具体对象的创建解耦。而简单工厂模式是工厂模式的一种简单形式,适用于对象较少且创建逻辑相对简单的情况。
2024-02-24 07:53:23 691
原创 【c++设计模式03】创建型1:简单工厂模式(Simple Factory Pattern)
并由实现该接口或继承该抽象类的具体工厂类负责实例化对象。在工厂模式中,客户端通过调用工厂类的方法来获取所需的对象,而无需直接实例化对象。工厂类根据不同的需求条件,使用不同的逻辑或算法创建相应的对象,隐藏了对象创建的具体细节。工厂模式可以有效地降低系统的耦合度,提高代码的可维护性和可扩展性。它符合面向对象设计原则中的开放封闭原则,即对扩展开放,对修改封闭。当需要新增一种产品时,只需添加相应的具体产品类和对应的工厂类,而无需修改已有的代码。常见的工厂模式包括。
2024-02-18 11:39:10 861
原创 【c++设计模式02】前言2:设计模式三原则
原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.csdn.net/article/details/133185304qq技术交流群:921273910。
2024-01-17 15:13:46 417
原创 【c++设计模式01】前言1:UML 类图
原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.csdn.net/article/details/133182698qq技术交流群:921273910面向对象设计主要就是使用UML的类图,类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。下面基于C++这门语言给大家讲一下UML类图的画法。
2024-01-10 19:54:16 987
原创 【cmake实战:番外】交叉编译——Linaro
本地编译本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译:比如,我们在 x86 平台上,编写程序并编译成可执行程序。这种方式下,我们使用 x86 平台上的工具,开发针对 x86 平台本身的可执行程序,这个编译过程称为本地编译。
2024-01-03 09:18:08 966
原创 【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 731
原创 【c++随笔17】C++ 中的 extern 关键字
我们知道,程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。在函数内定义的变量是局部变量,而在函数之外定义的变量则称为外部变量,外部变量也就是我们所讲的全局变量。它的存储方式为静态存储,其生存周期为整个程序的生存周期。全局变量可以为本文件中的其他函数所共用,它的有效范围为从定义变量的位置开始到本源文件结束。然而,如果全局变量不在文件的开头定义,有效的作用范围将只限于其定义处到文件结束。
2023-12-18 06:00:00 75
原创 【c++随笔16】reserve之后,使用std::copy会崩溃?
原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.csdn.net/article/details/134272501qq技术交流群:921273910。
2023-12-11 06:00:00 164
原创 【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 1505
原创 【c++随笔14】虚函数表
虚函数表是一个由虚函数组成的表格,用于实现动态绑定和多态性。每个包含虚函数的类都有自己的虚函数表,该表列出了该类及其所有基类的虚函数。当一个对象被创建时,它的类虚函数表也被创建,并且可以通过该对象的指针或引用来调用虚函数表中的函数。虚函数表是一种实现动态多态性的机制。每个包含虚函数的类都有一个虚函数表,其中存储着该类的虚函数地址。当通过基类指针或引用调用虚函数时,程序会根据对象的实际类型查找对应类的虚函数表,并调用正确的虚函数。// 基类Aclass A {public:// 基类B。
2023-11-27 06:00:00 496
原创 【c++随笔13】多态
我们查看《C++ Primer 第5版》第15.3章节 虚函数中的介绍(p537页)OOP的核心思想是多态性(polymorphism)。多态性这个词源自希腊语,其含义是“多种形式”。我们把具有继承关系的多个类型称为多态类型,因为我们能使用这些类型的“多种形式”而无须在意它们的差异。引用或指针的静态类型与动态类型不同这一事实正是C++语言支持多态性的根本所在。
2023-11-20 06:00:00 553
原创 【c++随笔11】面向对象和封装
面向对象编程是一种编程范式,它以对象作为程序的基本单元,将数据和操作捆绑在一起。每个对象都是一个独立的实体,具有自己的特征(数据成员)和行为(成员函数)。面向对象编程的核心思想是通过定义类来创建对象,从而模拟现实世界中的事物和关系。封装是面向对象编程的一个重要概念,它将数据和对数据的操作封装在一个类中。通过将数据成员声明为私有,封装确保数据只能通过类提供的公共接口进行访问和操作。封装提供了一种机制,用于隐藏数据的内部细节,从而增加代码的安全性、可维护性和可重用性。
2023-11-06 06:00:00 240
原创 【c++随笔10】C++模板和泛型编程
简介:模板和泛型编程是C++中强大而灵活的特性之一。通过使用模板,我们可以编写通用的代码,以处理不同类型的数据。本文将介绍C++ Primer 第5版中第16章的内容,涵盖模板的基本概念、函数模板、类模板、模板参数、成员模板和可变参数函数模板等主题,并提供相应的示例代码。
2023-10-30 06:00:00 64
原创 【c++随笔09】函数指针
函数指针:指向的是函数(而非对象)。和其他指针一样,函数指针指向某种特定类型。函数的类型由它的返回类型和形参共同决定,与函数名无关。该函数的类型是int(int,int)。想要声明一个可以指向该函数的指针,只需要用指针替换函数名即可//pf指向一个函数,该函数的参数是const int的引用,返回类型是bool类型从我们声明的名字开始观察,pf前面有个*,因此pf是指针;右侧,是形参列表,表示pf指向的是函数;左侧,发现函数的返回类型是double;
2023-10-23 06:00:00 111
原创 【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 1139 1
原创 【c++随笔07】常量、变量、static
我们通常将不需要被其他模块调用的全局变量或函数用 static 关键字来修饰,static 能够将全局变量和函数的作用域限制在当前文件中。
2023-10-02 05:30:10 151
原创 【c++随笔06】友元
友元(Friend)是C++中的一个重要概念,它允许某个函数或类访问其他类中的私有成员。友元被用于提供类之间的访问权限,使得某些函数或类能够绕过常规的访问控制机制来访问私有成员。友元在某些情况下非常有用,但使用不当可能会破坏封装性和数据的安全性。在C++中,友元可以被定义为全局函数、类、类的成员函数。友元关系必须在要访问的类中进行声明或定义。
2023-09-25 06:00:00 116
原创 【c++随笔05】C++ 内联函数的优势和使用方法
内联函数是一种优化技术,通过减少函数调用开销和提供编译器优化,可以显著提高程序的执行效率和性能。在使用内联函数时,我们需要注意合适的场景和使用方法,以充分发挥内联函数的优势。
2023-09-18 06:00:00 244
原创 【c++随笔04】宏
在 C++ 中,宏是一种预处理指令,用于在编译之前将代码文本替换为指定的内容。宏通常以 #define 开始,并且由一个标识符和一个代码片段组成。宏提供了一种机制,能够使你在编译期替换代码中的符号或者语句。当你的代码中存在大量相似的、重复的代码时,使用宏可以极大的减少代码量,便于书写。__FILE __当前源文件的路径名称;__FUNCTION__函数名称(包含类作用域),这里需要注意的是,如果是类的成员函数,还会将类名也打印,以标识作用域,形如:MyClass::Func;
2023-09-11 06:00:00 78
原创 【c++随笔03】构造函数、析构函数、拷贝构造函数、移动构造函数
构造函数的概念构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用。能够保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。能够保证对象被初始化。构造函数是特殊的成员函数,主要任务是初始化,而不是开空间。(虽然构造函数的名字叫构造)构造函数的函数名和类名是相同的构造函数无返回值构造函数可以重载会在对象实例化时自动调用对象定义出来。int m_day;Date d1;
2023-09-04 06:00:00 185
原创 【C++随笔02】左值和右值
完美转发(perfect forwarding)是C++11引入的概念,用于在函数模板中将参数按原样传递给另一个函数,同时保留其值类别(lvalue或rvalue)。它可以在保持精确性的同时避免不必要的复制或移动操作,提高代码的效率。完美转发通常与转发引用类型参数(如模板中的万能引用)一起使用,以实现泛型编程中的参数传递。在函数模板中,我们可以使用 std::forward 函数来进行完美转发。// 定义一个接收传入参数的函数i = 100;// 修改传入的左值参数。
2023-08-28 06:00:00 295
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关注的人