自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 资源 (3)
  • 收藏
  • 关注

原创 22_设计模式之解析器模式

模式定义:表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。使用动机:软件构建过程中, 如果某一特定领域的问题比较复杂,类似的结构不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。class Expression{public: virtual int interpreter(map<char, int> var) = 0; virtual ~Expression() {}};

2020-09-23 13:10:55 2

原创 21_设计模式之访问器模式

模式定义:表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。使用动机:软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在某类中做这些的更改,将会给子类带来和繁重的变更负担,甚至破坏原有设计。class Visitor;class Element{public: virtual void accetp(Visitor &visitor) = 0; virt

2020-09-23 13:09:17 18

原创 20_设计模式之命令模式

模式定义:将一个请求(行为)封装为一个对象,从而使你可用不懂的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。使用动机:软件构建过程中,“行为请求者”与“行为实现者“通常呈现一种”紧耦合“。但在某些场合--比如需要对象行为”记录,撤销/重做,事务“等处理,这种无法抵御变化的紧耦合是不适合的。...

2020-09-23 13:08:16 3

原创 19_设计模式之职责链模式

模式定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。使用动机:软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少的带来请求发送者与接受者的紧耦合。enum RequestType{ REQ_HANDLER1, REQ_HANDLER2, REQ_HANDLER3};class Request{private: str

2020-09-20 09:39:50 76

原创 18_设计模式之迭代器模式

模式定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示。使用动机:软件构造过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明的访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。template<typename T>class Iterator{public: virtual void first() { } virtual

2020-09-20 09:38:47 26

原创 18_设计模式之组合模式

模式定义:将对象组合成树形结构以表示“部分--整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性(稳定)。使用动机:软件在某种情况下,客户代码过多的依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性,扩展性等弊端。class Component{public: virtual void process() = 0; virtual ~Component() { }};// 树节点cla

2020-09-20 09:37:20 49

原创 17_设计模式之备忘录模式

模式定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。使用动机:在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公用接口来让其它对象得到对象的状态,便会暴露对象的细节实现。class Memento{private: string m_state; //...public: Memento() { } Memento(const

2020-09-20 09:36:23 10

原创 16_设计模式之状态模式

模式定义:允许一个对象在其内部状态改变时改变它的行为。从而时对象看起来似乎改了其行为。使用动机:在软件构建过程中,某些对象的状态如果改变;其行为也会随之而发生改变,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。enum NetworkState{ OPEN, CLOSE, CONNECT};class NetworkProcessor{private: NetworkState m_state;public: void Operation1

2020-09-20 09:35:23 5

原创 14_设计模式之适配器模式

模式定义:将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。使用动机:在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不能满足的。// 目标接口(新接口)class ITarget{public: virtual void DoTask() = 0; virtual ~ITarget() { }};// 遗留接口(老接口)class ITar

2020-09-20 09:33:34 5

原创 13_设计模式之代理模式

模式定义:为其它对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。使用动机:在面向对象系统中,有些对象由于某种原因(比如对象创建开销大,或者某些操作需要安全控制,或者需要进程的访问等),直接访问会给使用者,或者系统结构带来很多麻烦。class ISubject{public: virtual void process() = 0; virtual ~ISubject() { }};class RealSubject : public ISubject{.

2020-09-20 09:32:24 3

原创 12_设计模式之门面模式

模式定义:为子系统中的一组接口提供一个一致(稳定)的界面,门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。使用动机:同种功能性质的组件和其它子系统有过多的耦合。...

2020-09-20 09:31:03 4

原创 11_设计模式之享元模式

模式定义:运用共享技术有效的支持大量细粒度的对象。使用动机:在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行代价(只要指内存需求方面的代码)class Font // 该对象一般是只读的(即:创建后数据不会变){};class FontFactory{private: map<string, Font *> m_fontPool;public: Font *getFont(const string &amp.

2020-09-20 09:28:58 38

原创 10_设计模式之单例模式

模式定义:保证一个类仅有一个实例,并提供一个该实例的全局访问点。使用动机:在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性,以及良好的效率。class Singleton{private: Singleton();public: static Singleton *m_pSingleton; Singleton *getInstance();};Singleton *Singleton::m_pSingleto.

2020-09-20 09:27:37 4

原创 09_设计模式之构建器

模式定义:将一个复杂对象的构造与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。使用动机:在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂的对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。class House{public: void Init() // 这些流程的执行一定是放在一个Init方法中,而不能放在构造函数中(因为这里调用的存在虚方法) { Buil

2020-09-19 11:58:23 5

原创 08_设计模式之原型模式

模式定义:使用原型实例指定创建对象的种类,然后通过拷贝(深度拷贝)这些原型来创建新的对象。使用动机:在软件系统中,经常面临着“某些结构复杂的对象”的创建工作,由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。class ISpliter{public: virtual void Split() = 0; virtual ISpliter *clone() = 0; // 通过深度拷贝来克隆自己来达到数据状态的继承 virtual ~ISplite

2020-09-19 11:15:40 2

原创 07_设计模式之抽象工厂

模式定义:提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。使用动机:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在更多系列对象的创建工作。// 数据访问有关的基类class IDBConnection{};class IDBCommand{};class IDBDataReader{};// 抽象工厂方法class IDBFactory{public: virtual IDBC

2020-09-19 10:46:57 5

原创 06_设计模式之工厂模式

模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。使用动机:在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。class ISpliter{public: virtual void Split() = 0; virtual ~ISpliter() { }};class ISpliterFactory{public: virtual ISpliter

2020-09-19 10:45:41 4

原创 05_设计模式之桥模式

使用动机:由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个维度的变化。class MessagerImpl{public: ~MessagerImpl() { }public: virtual void PlaySound() = 0; virtual void WriteText(string &msg) = 0; virtual void Connect() = 0;};class Messager{public: Messager(M

2020-09-19 10:44:41 20

原创 04_设计模式之装饰模式

模式定义:动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,装饰模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)使用动机:在某些情况下我们可能会“过度的使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。class Stream{public: virtual char Read(int num) = 0; virtual

2020-09-19 10:43:47 8

原创 03_设计模式之观察者模式

模式定义:定义对象的一种一对多(变化)的依赖关系,以便当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新。使用动机:在软件构建过程中,我们需要对某些对象建立一种“通知依赖关系”--一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。class IProgress{public: virtual void DoProgress(float val) = 0; virtual ~IProgress() { }};class Progress

2020-09-19 10:42:43 24

原创 02_设计模式之策略模式

模式定义:定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(支持变化),该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)使用动机:在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何运行时根据需要透明的更改对象的算法,将算法与对象本身耦合,从而避免上述问题。class TaxStrategy{public: virtual double Calc

2020-09-19 10:40:49 2

原创 01_设计模式之模板方法

重构关键技法静态 --> 动态 早绑定 --> 完绑定 继承 --> 组合 编译时依赖 --> 运行时候依赖 紧耦合 --> 松耦合使用动机:在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。如何在确定稳定操作结构的前提下,来灵活对应各个子步骤的变化或者晚期实现需求。class Library{public: virtual ~

2020-09-19 10:39:14 12

原创 00_设计模式之面向对象设计原则

依赖倒置原则高层模块(稳定)不应该依赖底层模块(变化),二者都应该依赖于抽象(稳定) 抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)开放封闭原则对扩展开放,对更改封闭 类模块应该是可扩展的,但是不可修改单一职责原则一个类应该仅有一个引起变化的原因 变化的方向隐含着类的责任Liskov替换原则子类必须能够替换它们的基类 继承表达类型抽象接口隔离原则不应该强迫客户程序依赖它们不用的方法 接口应该小而完备优先使用对象组合,而不是类继承类继承通常为“白箱复用

2020-09-19 10:36:51 2

原创 宏编程

<如何调试>gcc -E 让编译器 在预处理结束后停止,不进行 编译、链接gcc -P 屏蔽编译器 输出预处理结果的 行标记 (linemarker),减少干扰=======================[使用范例如下]=================--->特殊符号和模板元编程不一样,宏编程没有类型的概念,输入和输出都是符号,不涉及编译时的C++语法,只进行编译前的文本替换;一个宏参数是一个任意的符号序列,不同宏参数之间用逗号分隔;每个参数可以是空序列,且空白字符会被忽略

2020-07-10 09:13:59 47

原创 protobuf编译、安装、使用 (Windows+VS)

<安装Protobuf>1)首先需要下载源代码2)解压后得到一个目录,等下CMake会用到如果你电脑没有CMake,需要去官网下载3)双击打开下载解压后的CMake目录/bin/cmake-gui.exe现在,选择刚才解压的目录,和构建输出目录4)使用VS打开D:/protobuf/build下的项目即可编译,成功后会在如下目录生成如下文件5)把proto文件拷贝到上面的目录中执行[protoc.exe--cpp_out=./ Account.proto],即可生成*.pd.

2020-07-09 16:44:26 63

原创 vi配置文件

把下面的代码拷贝到.vimrc即可使用:set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936,default,latin1set termencoding=utf-8set fileformats=unixset encoding=prc"set encoding=utf-8"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

2020-06-04 14:40:49 53

原创 libpcap介绍

libpcap(Packet Capture Library),即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库。它是一个独立于系统的用户层包捕获的API接口,为底层网络监测提供了一个可移植的框架。 一、libpcap工作原理 libpcap主要由两部份组成:网络分接头(Network Tap)和数据过滤器(Packet Filter)。网络分接头从网络设备驱动程序中收集数据拷贝,过滤器决定是否接收该数据包。Libpcap利用BSD Packet F...

2020-05-16 14:19:39 63

原创 使用sh -x 调试 shell脚本

[以下内容来自:http://blog.chinaunix.net/uid/20564848.html]1. 通过sh -x 脚本名 #显示脚本执行过程2. 脚本里set -x选项,轻松跟踪调试shell脚本"-x"选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个"+"号。 "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。shell的执行选项除了可以在.

2020-05-14 09:58:40 45

原创 关于引用的so命名冲突的问题

今天使用的一个.a文件,导致命名冲突,解决方法如下:1)第1步:使用 ar -x libxxx.a 将静态库中的目标文件取(解压)出来, 放在当前目录下 第2步:使用 gcc -shared *.o -o libxxx.so -fPIC 生成so文件 第3步:使用新的so重新编译,记得编译时加上-Wl,-Bsymbolic...

2019-08-21 10:08:11 89

原创 JS、C#方法互相调用示例

C#代码如下: namespace JsCallWinform{ /* * JS、C#方法互相调用示例 */ [System.Runtime.InteropServices.ComVisibleAttribute(true)] public partial class Form1 : Form { p

2016-03-30 10:21:24 5312 1

转载 C++ 资源大全

摘要:C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。关于 C++ 框架、库和资源的一些汇总列表,由 fffaraz发起和维护。内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库C++ Standard L

2016-02-18 09:39:16 404

原创 VS2012+Qt5

1. 下载zip源码,官方下载地址 http://download.qt.io/official_releases/2.安装python3.解压缩qt-everywhere-opensource-src-5.1.1.zip文件,修改qtbase\mkspecs\win32-msvc2012\qmake.conf文件,将QMAKE_CFLAGS_RELEASE    = 

2016-02-15 16:35:27 327

转载 typedef struct 用法详解和用法小结

第一篇:typedef struct与struct的区别1. 基本解释typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。至于typedef有什么微妙之处,请你

2015-08-25 17:30:55 245

原创 linux 日常命令

cd 目录名称cd ~cd ..cd -del -f 文件名称del -rf 目录名称find . -name *.o | xargs rm -f (PS:删除当前目录下以.O结尾的所有文件)lsls -l 和 ll 显示的信息一致ls -a (PS:显示隐藏文件)ls -lh (PS:以易读方式列出文件)ls -r  (PS:倒序方式显

2015-08-07 10:21:59 363

转载 cuda5.5与VS2010的编译环境搭建

目前版本的cuda是很方便的,它的一个安装里面包括了Toolkit`SDK`document`Nsight等等,而不用你自己去挨个安装,这样也避免了版本的不同步问题。1 cuda5.5的下载地址,官方网站即可:     https://developer.nvidia.com/cuda-downloads   在里面选择你所对应的电脑版本即可。2 VS2010这个没什么说的了,网上

2015-06-03 22:07:13 385

转载 source命令

当修改了/etc/profile或.bash_profile文件,我想让它立刻生效,而不用重新登录;这时就想到用source命令,如:source /etc/profile 或 source .bash_profile对source进行了学习,并且用它与sh 执行脚本进行了对比,现在总结一下。source命令:source命令也称为“点命令”,也就是一个点符号(.),是bash

2015-04-28 14:28:36 303

原创 “当前不会命中断点。源代码与原始版本不同”问题的解决办法

开发时有一个工程的一个文件的断点无效,VS 2005提示说当前不会命中断点。源代码与原始版本不同,请在断点选项里设置允许源代码与原始版本不同。这个是针对单个断点进行设置。 第一步:先清理解决方案第二步:在“工具”-->“选项”-->“调试”-->常规-->“要求源文件与原始版本完成匹配” 去掉勾

2015-04-23 10:38:41 554

原创 Sybase CEP 运维脚本

%ESP_HOME%\bin\esp_cluster_admin --uri esp://localhost:19011 --username sybase --password sybase进入后可以输入 help 查看具体应用,举几个例如下:add project  default/cepproject1  /root/esp/cepproject1.ccx  /root/esp/

2015-03-28 11:16:15 817

转载 C++ inline 函数

原文()(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。      inline int min(int first, int secend) {/****/};      inline 函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,in

2014-06-13 14:08:27 374

转载 new (std::nothrow) 与 new

普通new一个异常的类型std::bad_alloc。这个是标准适应性态。在早期C++的舞台上,这个性态和现在的非常不同;new将返回0来指出一个失败,和malloc()非常相似。   在一定的环境下,返回一个NULL指针来表示一个失败依然是一个不错的选择。C++标准委员会意识到这个问题,所以他们决定定义一个特别的new操作符版本,这个版本返回0表示失败。   一个nothow new

2014-06-12 16:58:16 10786

AES的ECB、CBC、CFB、OFB、CTR五种加密模式

AES的ECB、CBC、CFB、OFB、CTR五种加密模式

2012-04-26

AES 代码示例

AES 代码示例

2012-03-26

sign_code.7z

使用c++代码实现openssl的实现SHA1 RSA 签名 验签实例.

2020-07-22

空空如也

空空如也

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

TA关注的人 TA的粉丝

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