- 博客(43)
- 资源 (11)
- 收藏
- 关注
原创 CMAKE获取编译操作系统、编译位数、编译方式
获取正在编译的操作系统IF (CMAKE_SYSTEM_NAME MATCHES "Linux") MESSAGE(STATUS "current platform: Linux ")ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows") MESSAGE(STATUS "current platform: Windows")ELSEIF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD") MESSAGE(STATUS "curre
2022-03-28 11:26:59
2521
1
原创 Windows下实现COM口通信c++源代码(验证可行)
近期接到一款新的硬件设备需要实现PC端与安卓终端实现COM口通信,以往都是厂家封装了通信模块或者采用Windows的SCARD读卡器设备,调用SCardConnectA、SCardTransmit等方法来实现通信。 这一次比较惨,需要写个比较原始一点的。串口的连接和读写参考了如下地址:C++ 串口通讯(含所有源代码)_vivisl的博客-CSDN博客_串口通信代码 本人在创建和数据读写上做了些许优化,采用新增写线程、读线程、和令牌回令机制来保证一应一答方便上层操作...
2021-09-17 18:20:33
1999
原创 c++ 设计模式23讲之访问者模式
访问者模式定义:对象结构中对众多的元素进行访问操作,将结构分为访问者对象和元素对象优点:(1)增加新的访问很方便(2)将元素的访问集中到一个访问者对象,而不是在一个个元素类中实现缺点:(1)增加新的元素类比较困难,需要需要具体访问者,不满足开闭原则(2)破坏封装性,访问者对象需要对元素对象进行操作,可能会暴露元素对象内部操作和状态使用范围:一个对象结构包含对...
2019-08-21 10:57:56
117
原创 c++ 设计模式23讲之模板方法模式
模板方法模式定义:定义一个操作中算法的框架,而将一些步骤延迟到子类优点:(1)通过派生类覆盖父类的方法来实现反向控制结构(2)模板方法提供一种代码复用技术缺点:(1)需为每一个基本方法实现一个子类,如果父类可变方法多将导致类的个数增加使用范围:提供一套算法框架,将具体细节实现步骤延迟到子类结构:template_method_pattern:模板抽象类...
2019-08-20 18:34:40
90
原创 c++ 设计模式23讲之状态模式
状态模式定义:允许一个对象在内部状态改变时改变其行为优点:(1)封装了状态的转换规则,可以对状态对象统一管理而不是分散到一个业务代码中(2)注入不同的状态对象实现不同的行为(3)环境对象可以共享状态对象缺点:(1)结构和实现都很复杂容易导致代码混乱,且多半存在环境类与状态类相互依赖情况(2)增加状态类须同时修改状态转换源代码,不满足开闭原则使用范围:对象...
2019-08-20 16:07:22
109
原创 c++ 设计模式23讲之备忘录模式
可以用友元来实现对私有成员的访问备忘录模式定义:不破坏封装前提下捕获一个对象的内部状态,并在对象之外保存,从而使对象能在以后恢复到该状态优点:(1)实现一种恢复机制,对象可回溯到先前状态(2)可采用集合方式实现多次回溯操作缺点:(1)资源消耗过大,有众多的临时对象需要分配和跟踪使用范围:需要保存一个对象全部或者部分状态,且会触发回撤情况如: 文档编辑...
2019-08-20 14:09:56
124
原创 c++ 设计模式23讲之中介者模式
中介者模式定义:定义一个中介者对象来封装一系列对象交互优点:(1)简化对象间的交互,将多对多的网状关系变成1对多的星状关系(2)将对象间解耦合缺点:(1)大量的交互操作集中在中介者类,增加维护难度使用范围:系统间对象存在大量的相互引用关系,一个对象的状态改变需同步影响多个引用对象如:简历包括纸质、网页、APP三种方式,需要同步更新结构:mediato...
2019-08-19 23:22:24
111
原创 c++ 设计模式23讲之迭代器模式
c++的STL对容器有专门的迭代器(iterator)方法,不需自己实现细节直接调用即可迭代器模式定义:按照一种方法顺序访问一个聚合对象各个元素,不暴露该对象内部细节优点:(1)一个聚合对象可以有多种遍历方式(2)将数据保存和使用分离开,简化聚合类设计(3)增加抽象层增加新的聚合类和迭代器类都很方便缺点:(1)增加聚合类时也需要增加迭代器类(2)需要充分...
2019-08-19 13:09:26
122
原创 c++ 设计模式23讲之职责链模式
职责链模式定义:避免请求发送者与处理者耦合,将多个处理对象连成一条链,传递请求直到有一对象处理它优点:(1)链中对象不需知道链结构,由客户端创建链(2)请求对象只需维护后继引用,不需维持它对所有候选者引用(3)增加请求对象无需修改源代码,只需重新创建链缺点:(1)一个请求没有明确的接受者,可能会未被处理(2)较长的职责链设计多个处理对象,性能会受到一定影响(...
2019-08-19 12:28:00
117
原创 c++ 设计模式23讲之代理模式
代理模式定义:给莫个对象提供抽象占位符,由代理对象控制对源对象的访问优点:(1)协调调用者和被调用者降低系统耦合(2)可以在代理类增加额外的职责(3)起到远程代理、缓存代理、虚拟代理、保护代理等功能缺点:(1)增加中间代理类,增加代码复杂性和系统性能消耗(2)代理模式需新增额外工作使用范围:当客户端无法直接访问真实系统,或者访问需要增加其它前置方法如...
2019-08-16 23:34:42
102
原创 c++ 设计模式23讲之享元模式
享元模式定义:运用共享技术支持大量细粒度的复用优点:(1)减少内存中对象中的数量,使得相同或相似对象只保留一份(2)外部状态相对独立不影响内部状态缺点:(1)系统变得复杂了,需要分离内部状态和外部状态使用范围:系统存在大量的相同相似对象,且这些对象可以组成对象池如:围棋黑白棋子结构:flyweight_pattern:享元抽象类,棋子的基类bla...
2019-08-16 22:46:26
90
原创 c++ 设计模式23讲之外观模式
外观模式定义:提供统一入口来操作子系统,避免客户端与各个子系统的耦合性优点:(1)对客户端屏蔽各子系统,减少之间的耦合(2)子系统的修改也不会影响到外观对象缺点:(1)外观模式未能很好限制客户端直接使用子系统使用范围:当需访问多粒度的子系统或者子流程情况如:BS模式的主界面或者导航页面结构:实现:namespace structura...
2019-08-15 21:17:24
91
原创 c++ 设计模式23讲之装饰模式
装饰模式定义:不改变对象前提下动态增加其职责,实现一种比子类更灵活的扩展方式优点:(1)比继承更灵活,不会导致类个数极度增加(2)可以对一个对象多种装饰(3)具体构建类和装饰类可单独变化缺点:(1)会产生很多小对象,占用资源(2)需要区别每个对象的连接关系(3)对于多次装饰类增加排错难度使用范围:不改变对象增加职责功能的情况结构:decora...
2019-08-15 19:28:43
124
原创 c++ 设计模式23讲之桥联模式
桥联模式考虑多继承关系的类按照维度进行降解,实现N*M转成N+M桥联模式定义:将每个维度进行抽象化,将抽象部分和实现部分解耦合可以独自变化优点:(1)解除类维度绑合关系,将维度由笛卡尔积关系转成平铺关系(2)取代多继承,可便于对单独维度进行扩展缺点:(1)增加系统的理解和设计难度(2)需要清晰分析出独立变化的维度,并正确知晓其组合关系使用范围:一个类...
2019-08-13 23:39:26
244
原创 c++ 设计模式23讲之原型模式
原型模式考虑是深拷贝还是浅拷贝,浅拷贝直接通过自带的复制构造、赋值构造即可,深拷贝就需要满足5原则。最好将成员变量定义为智能指针,容器,栈对象原型模式定义:通过实例的克隆方法实现新的实例创建优点:(1)创建实例很复杂时可以简化创建过程提高效率(2)实例创建有很多前置条件时可以跳过缺点:(1)深克隆会操作很麻烦,考虑指针重分配、重释放,状态一致(2)对类进...
2019-08-13 22:26:31
103
原创 c++ 设计模式23讲之建造者模式
建造者模式是将局部成员构建成一个整体,返回整体产品对象,抽象工厂是针对一系列产品的对象创建和返回建造者模式定义:将一个复杂对象的构建与表示分离,通过导演类方法依次组装好局部零件返回产品对象优点:(1)客户端不需知道产品内部细节,只跟建造的导演类有依赖关系(2)具体建造间无相关性,便于扩展(3)产品集成创建只在导演类方法中,便于修改缺点:(1)创建的产品必须具...
2019-08-13 17:17:11
105
原创 c++ 设计模式23讲之抽象工厂模式
抽象工厂模式与工厂模式的区别在于,抽象工厂是工厂类的升级版本。工厂模式适用于一维(产品等级),抽象工厂适用于二维(产品等级与产品簇)抽象工厂模式定义:提供创建一系列相关或相互依赖的接口,通过具体的工厂类来创建二级产品的对象实例优点:(1)产品实例的细节进行封装,向客户隐藏了实例化步骤(2)增加新产品只需增加产品类和生成产品实例的工厂类缺点:(1)产品类与产品实例...
2019-08-12 23:08:03
165
原创 c++ 设计模式23讲之工厂模式
工厂模式与简单工厂的区别在与,简单工厂是工厂类创建实例对象;工厂模式是对不同产品类增加各自的创建工厂类工厂模式定义:定义一个创建产品对象的接口工厂,用接口工厂的派生类实现对产品派生类的创建优点:(1)产品实例的细节进行封装,向客户隐藏了实例化步骤(2)增加新产品只需增加产品类和生成产品实例的工厂类缺点:(1)产品类与产品实例生成类成对出现和维护(2)增加了中...
2019-08-12 21:48:56
85
原创 c++ 设计模式23讲(番外篇)之简单工厂模式
简单工厂模式定义:定义一个工厂类根据不同参数创建其他类的实例优点:(1)将实例创建与使用分离(2)可通过配置增加新的产品类,灵活扩展(3)客户端可不关心产品类类名,只需知道参数定义和生成实例的对应关系缺点:(1)工厂类集合了所有创建逻辑,指责过大,一旦崩溃影响很大(2)新增加参评类需要同步修改工厂类使用范围:众多相似关系的产品独立创建各自实例情况,如调用...
2019-08-12 21:26:09
112
原创 c++ 设计模式23讲之观察者模式
/*编程小技巧1.声明和定义最好分别写在.h和.cpp文件,避免循环依赖2.前向声明只能使用指针和引用的声明,不能初始化对象和调用方法3.共同的方法最好集成在基类,避免代码冗余4.代码是人看的,不要用很炫的技巧把自己坑了5.virtual override static可以用在声明但不能用在定义6.inline要用在定义开头,用在声明无效7.避免转成基类截断,最好用智能指针或者bo...
2019-08-12 15:25:22
120
原创 c++ 设计模式23讲之组合模式
组合模式定义:组合多个对象形成树形结构,实现部分-整体的层次关系优点:(1)很清楚的定义树形层次,结点和叶结点进行分割,便于扩展(2)很灵活的递归组合缺点:(1)扩展的对象需要满足抽象接口的约束,相互间具有依赖关系(2)组合深度很大时创建会很麻烦,也会创建很多的子对象(3)类型转换时避免截断使用范围:满足树形结构,且子结点也可做为下一个组合的根节点(类似...
2019-08-11 21:15:05
122
原创 c++ 设计模式23讲之命令模式
命令模式定义:将不同的请求封装成抽象的命令,通过命令内部来调用真实的类实现方法优点:(1)将请求者和接受者解耦合,请求者只需发相关命令,命令内部调用接受者方法(2)很方便扩展新的命令缺点:(1)会导致过多的命令类,增加了中间层代码使用范围:调用者需要将请求和实现分类的系统,存在同级关系的众多命令类如:计算器的加减乘除等操作命令,游戏角色的上下左右移动命令等...
2019-08-10 18:09:46
99
原创 c++设计模式23讲之策略模式
策略模式定义:定义一系列算法,将每一个算法封装起来,能够通过接口继承来实现相互替换使得算法可以独立用户而变化优点:(1)满足开放封闭原则,对扩展开放对修改封闭,便于算法簇完善(2)将调用类和算法策略类解耦合,避免硬编码(3)调用者可灵活调用切换算法,改动量极少缺点:(1)客户端必须知道所有的算法类,并知晓各种算法类的调用前置条件(2)客户端每次只能使用一个算...
2019-08-10 16:13:42
74
原创 c++ 设计模式23讲之适配器模式
适配器模式定义:将一个类的接口转成客户希望的另一个接口优点:(1)将目标类和适配器类解耦合(2)提高类透明性和复用性(3)扩展灵活性和扩展性缺点:(1)适配类成为最耦合部分使用范围:已存在目标类和适配者类,还需知晓二者的转换关系。结构:实现110v适配目标220v的案例:实现:适配模式(adapter_pattern)属于结构型模式(s...
2019-08-09 23:14:09
119
原创 c++ 设计模式23讲之单例模式
单例模式定义:确保一个类只有一个实例,并提供全局访问点来访问这个实例优点:(1)内存中只存唯一实例可节省系统资源(2)用户可以严格控制实例缺点:(1)没有抽象层,违反了依赖倒置原则(可通过依赖注入来达到单例模式相同效果)(2)单例类职责过重,会违反单一原则(3)垃圾自动回收技术的语言,实例长时间不用会回收导致实例对象状态的丢失使用范围:需要单一实例的环境...
2019-08-09 18:49:53
170
原创 c++ 6种排序算法源代码(冒泡、快排、堆排、插入、简单选择、归并)
// sort.cpp : 定义控制台应用程序的入口点。//#include <iostream>using namespace std;template <typename T>void print(T* &arr,int len) { for (int i=0;i<len;i++) { cout<<...
2018-10-16 11:47:48
333
原创 VM虚拟机配置centos7的网络连接
首先感谢:https://www.linuxidc.com/Linux/2017-07/145845.htm上面网址有较详细的步骤。1.选择vmware的编辑,然后点击虚拟网络编辑器2.点击更改设置(需要有管理员权限)3.选择VMnet0为桥接模式,选择自动或者网卡4.打开“网络和共享中心”选择“VMware Virtual Ethernet Ad...
2018-10-07 15:50:20
2330
原创 MFC 常见问题 fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version)
回复于 2016-03-30 13:40:34 #6 得分:0fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]解决方法:项目,属...
2018-06-20 17:38:50
2656
2
原创 c++ 实现字符串按字符分割
//头文件#include <string>#include <vector>//-------------获取按ch分割的子字符串-------------------------- std::vector<std::string> split(char* pStr, char ch) { std::vector<std::string> vec...
2018-06-08 11:44:03
1411
原创 【ocx疑难杂症0】浅谈OCX开发注册“逐用户重定向”问题
最近按公司要求封装一个OCX,本来很简单的一件事却遇到一个很奇怪的问题。在编译器vs2010编译后注册报“逐用户重定向”当时在莫度的带领下差点全军覆灭,提到2点解决方案(狗比膏药--坑的一逼)1.改工程属性从DLL为lib变成这种方案虽然编译器是过去了但是regsvr32注册没一点反应。2.改链接器配置变成这个更狠,编译器都过不了。---------------------------------...
2018-05-18 17:57:52
588
1
原创 c++对ftp/sftp文件及文件夹上传下载操作工程源代码
1.完整的项目结构,文档,测试用例2.经过单元测试,集成测试3.sftp使用sshlib2技术源代码工程下载地址:https://download.csdn.net/download/whish1994/10386884GitHub社区clone地址:https://github.com/hiWSH/ftp_sftp调用实例:SFTP操作const char csOpen[] = "{\"ip\"...
2018-05-02 15:16:04
12320
9
原创 c++ split分割字符串为vector
目的:类似于java的split函数实现字符串根据"|"分割得到的字串1.加上头文件#include<vector>2.复制本地文件可调用的函数代码/*aim:便于以后可以根据分割符扩展压缩文件数量author:wshtime:20180403input: string strTime:需要分割的字符串output: vector<WCHAR*>:分割后保存的vector容...
2018-04-25 11:39:08
3097
原创 CreateDirectory创建多级目录
目的:实现用CreateDirectory创建多级目录1.引入静态库#include "shlwapi.h"#pragma comment(lib,"shlwapi.lib")2.函数const wchar_t* wcstrrchr(const wchar_t* str, const wchar_t wc){ const wchar_t* pwc = NULL; for (int i=wcs...
2018-04-16 14:50:26
6171
原创 Windows平台c++工程base64编码和文件的相互转换
GitHub社区代码地址:https://github.com/hiWSH/base64_filecsdn工程下载地址:https://download.csdn.net/download/whish1994/10341026目的是实现任何二进制文件尤其是图片文件得到base64编码,或base64编码字符串转成相对应的二进制文件。感谢前人提供的base64加密解密的源代码(5分没有白费)。编译器...
2018-04-11 12:12:45
1492
原创 windows平台c++对多文件和目录的zip压缩解压缩
源代码下载地址:https://download.csdn.net/download/whish1994/10339129挺全面的c++对zip文件压缩解压缩操作项目源代码。秉着程序猿开源精神,赚点积分下载资料。
2018-04-10 16:15:47
2181
原创 从一段代码谈GetPrivateProfileString的深坑
总结:GetPrivateProfileString注意文件是否存在,文件不存在或不具有r读权限会在运行时报内存错误。失败源代码如下:string programDir = GetOcxPath(file);//得到ini配置文件路径ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,"c:\\base64bmp_confi...
2018-03-30 12:26:03
2554
原创 ocx 和 EXE 当前路径运行路径区别
获取工程运行路径源代码string GetProgramDir() { char exeFullPath[MAX_PATH]; // Full path string strPath = ""; GetModuleFileName(NULL,exeFullPath,MAX_PATH); strPath=(string)exeFullP...
2018-03-29 00:33:14
1122
Windows平台c++对ftp/sftp文件和文件夹下载上传工程源代码
2018-05-02
Windows平台c++工程base64与二进制文件相互转化
2018-04-11
c++ 对properties配置文件读写源代码
2018-04-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人