
c++
文章平均质量分 78
itegel84
这个作者很懒,什么都没留下…
展开
-
【设计模式】桥
bridge模式据说是比较复杂的一个模式,从类图看其实一点都不复杂。我想复杂的部分应该就是怎么防止滥用吧。其主要思想是将一些经常变化实现部分与其表述分开。这样就表述和实现都可以独立变化了。这里想起了鸵鸟是不是鸟的一个问题。也不知道举得合不合适。主要还是写一些代码吧。仅供参考就好。现在对这块还没有更深入的理解。另外一个说bridge模式复杂的原因,我觉得主要是因为他应用的场景本身就复杂。原创 2014-03-26 16:14:20 · 487 阅读 · 0 评论 -
【设计模式】备忘录
备忘录,其实名字也比较形象。我们经常遇到将一个类的状态恢复到历史版本的需求。比如一个记事本,想保存一个上N个状态,通过Ctrl+Z可以恢复此前编辑内容。备忘录就非常适合这种场景。此时发起者类,希望能够将自身状态保留在某处,而且不希望过多的暴露细节。为了上述目的,发起者会在某个时刻通过new出一个备忘类对象,并将该对象托管给管理者类。然后需要恢复状态时,又从管理者类中获取具体状态,将自身恢复到某原创 2013-06-08 15:41:28 · 908 阅读 · 0 评论 -
【设计模式】解释器
解释器,似乎应用场景比较固定:解析某种文法(比如正则表达式,编程语言)。实际中应用可能不会很多,先拿来了解一下。肯定是理解还不够深入。所没能真正体会其奥妙。该模式由上下文、表达式和客户组成。表达式又分为终结节点和非终结节点组成。这种结构天然的会想到用递归。所以性能肯定不是很理想。当然在设计模式那边书里也说了该模式应用场景就是对性能没有严苛的要求的场景。终结节点,负责解析该节点处的行为,原创 2013-05-30 19:04:22 · 921 阅读 · 0 评论 -
【设计模式】命令
命令模式,最常应用的场景或许就是各种触发命令的场合。这个通过名称就可以联想,而且还比较容易理解。而其他诸如回调啊之类的应用场景目前还不是很能体会。命令模式目的用命令类本身将client和其真正实现者(receiver)进行解耦,从而用户只关心具体的命令,而不去关心其实现。而增加命令,对于现有的receiver和client都可以透明。而对于命令中的可撤销等感觉也不是必须的。增加这个特性原创 2013-05-27 19:36:58 · 580 阅读 · 0 评论 -
【设计模式】职责链
设计模式听起来挺神秘,看例子和实现又很简单,用起来却灵活多变,总叫人觉得没学到真正灵魂的东西。从今天起,一个一个模式的记录一下我自己的理解。因为时间问题,这部分可能会延续比较长的时间了。 职责链:顾名思义就是一个链表(实际上跟链表有本质区别)。职责链是为了解决请求和多个响应者之间的耦合。 先看一下UML描述吧:当前处理者,如果能够处理该请求,则处理之,否则将该请原创 2011-03-28 15:09:00 · 839 阅读 · 0 评论 -
【设计模式】模板方法
Template方法模式,与c++的模板没有直接关系。或者可以认为这里的template是针对方法(函数)来说的,而c++的template则是针对成员变量或者参数来讲的。字面意思有一些关系。template method主要是通过在父类中定义一个模板,子类中实现该模板中的个性化部分。实现了固定部分和变化部分的解耦。模板方法本身比较简单。其目的就是为了共享一些公共部分,提升代码复用性。简单原创 2013-05-23 18:24:27 · 634 阅读 · 0 评论 -
C++网络通信框架 ACE
还没用过,先备用,很多时候连名字都想不到.ACE自适配通信环境(ADAPTIVE Communication Environment)是可自由使用、开放源码的面向对象(OO)构架(framework),它实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可重用C++包装外观(wrapper facade)和构架组件,可跨多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件原创 2013-04-26 15:24:46 · 1665 阅读 · 0 评论 -
explicit关键字
http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值转载 2013-04-22 11:37:04 · 497 阅读 · 0 评论 -
g++编译优化指南
//这个写得比较详细GCC编译优化指南作者:金步国版权声明本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件。您可以自由链接、下载、传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明。转载 2012-04-10 19:29:47 · 7186 阅读 · 0 评论 -
g++参数说明
[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇编语言,生成文件.s 3.有汇编变为目标代码(机器代码)生成.o的文件 4.连接目标代码,生成可执行程序 [参数详解] -x languag转载 2012-04-10 19:17:16 · 1425 阅读 · 0 评论 -
【设计模式】迭代器
迭代器,应该都不陌生了,STL就有提供。迭代器模式,就是为了对于聚合对象做遍历用,从而隔离具体聚合对象和其访问者。访问者不需要知道聚合对象内部实现,也可以不用跟直接跟聚合对象打交道。对于不同的聚合对象,一般都用统一的接口(多态迭代),从而方便使用者。迭代器的实现相对也比较简单,但是有一些重复读,跳读等问题。这个后面在研究研究。/***************************原创 2013-05-31 11:59:36 · 607 阅读 · 0 评论 -
【设计模式】中介者
中介者,说白了跟市面上黑中介类似。当然这个中介,开发者是可以控制其行为的。也是在一定的信任关系上建立的。该模式要解决的问题是,一堆对象之间交叉耦合问题。网上看过群聊的例子。如果没有任何一个平台,多人之间的会话会是什么样的呢?不举多人,就三个吧A想把一句话说给BC,那么他首先要知道B和C在哪儿,然后分别告诉对方,自己想说的事情。如果再加一个人呢?问题很明显,此时各种群聊工具应运而生。我写原创 2013-06-05 19:33:37 · 893 阅读 · 0 评论 -
【设计模式】门面
Facade(fe‘saad)模式,是一个没有固定l原创 2014-04-04 14:47:21 · 641 阅读 · 0 评论 -
【设计模式】装饰
Decorator模式,可以不改变原有类,或者凡索的继承就可以改变其行为。不会破坏原有接口。我觉得decorator是最优雅的一个模式。设计模式中的小贵妇,小喜欢。还是那个经典的咖啡加牛奶,糖的问题。其实牛奶咖啡不是咖啡,也不是牛奶。只是一个组合体,所以用继承等来解决从概念上就有点说不通。何况还会带来乘积关系的子类膨胀。直接写代码吧: /** * @file test_de原创 2014-04-03 11:36:28 · 664 阅读 · 0 评论 -
【设计模式】组合模式
组合模式(composite)主要用来解决树形层次结构对象模型。用统一的component对象屏蔽不同类型的子节点的差异。对于客户端来说都提供一个统一的接口。典型应用场景如菜单,文件树等。组合模式思想感觉跟递归有一些关系。将不同的items组合成一个composite,而不同的composite和叶子节点又能组合出新的composite。看起来该模式似乎还比较简单。但是也没想到更多的场原创 2014-04-02 11:26:32 · 527 阅读 · 0 评论 -
【设计模式】适配器
adapter,其实除了是一种软件设计模式,也是系统设计中经常碰到的思路。两个模块交互,有一个升级后接口变了,另一个还不想升级,这时候就需要一个适配模块,做个翻译的工作。总体思想比较简单。C++实现有两种,一种是类适配。通过公共继承目标类,私有继承被适配的类的多重继承来实现。因为本人对多重继承没什么好感,所以没写相关demo。另一种就是组合方式,适配器维护一个被适配的类的指针来实现。因原创 2014-03-19 17:15:35 · 852 阅读 · 0 评论 -
开源C/C++网络库比较 ace &&bosst
来源:http://wanglimin2004.blog.163.com/blog/static/115488498201271611723476/ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候, 要根据情况,看你从那一层来进行使用。 在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了,转载 2014-02-21 10:11:17 · 687 阅读 · 0 评论 -
【设计模式】单件
balabala估计很多人开始看设计模式的书或者初学时用得最多的都是单件了。就不多说了。不过小心滥用。这里单独那一个文章来写是因为,单件是创建型模式中最后一个。作为一个里程碑吧。创建型模型,用得最多的估计好似工厂方法。其他的可以认为是其一种衍生模式。后面继续结构性模式。原创 2013-09-23 18:58:42 · 567 阅读 · 0 评论 -
【设计模式】原型模式
原型模式,如其名称,核心就是要实现一个原型类,该类支持clone操作,从而客户可以从原型克隆出具体的类。其效果主要有如下:可以动态增加和删除产品。这个就是通过clone代替new等操作,也避免了客户与具体类打交道。通过改变对象的值,指定新的对象。clone出一个新对象后可以修改其参数改变对象,如果参数较多,可以提供类似initialize方法。减少creator类,减少子类数目。客原创 2013-09-23 15:40:13 · 716 阅读 · 0 评论 -
【设计模式】工厂方法
工厂方法,跟抽象工厂、建造者模式等解决的问题都类似,通过将产品和其实现分离,达到了客户和具体产品之间的解耦。工厂方法,其精髓就是他名字本身,在工厂类中提供一个工厂方法,该方法返回具体的产品。客户只需要关注该产品的接口(一般是抽象父类),而无需关注起具体实现和创建过程。工厂方法的一个缺点是客户可能仅仅为了穿件一个具体的产品,需要增加creator的一个子类。一般通过c++的模板方法可以解原创 2013-09-16 13:21:39 · 890 阅读 · 0 评论 -
【设计模式】抽象工厂
好久没写博客了,前端时间比较忙。今天开始写创建型模式的demo。第一个模式是抽象工厂,也是圣经上第一个模式。当然也是比较简单的模式,该模式主要职责是将客户和具体的产品分离了。将多个产品组装到同一个工厂下。客户只需要跟工厂打交道,而不需要知道产品具体的实现方式。先写个demo,很简单,有一个抽象工厂,可以生产A/B两种产品。有两个具体的工厂,工厂1、2。他们都可以生产A/B两种产品,但是具体制造过程原创 2013-09-10 20:34:09 · 843 阅读 · 0 评论 -
关于内联函数
如果内联函数真正起作用,应该定义在头文件中,这样引用的地方才能在代码级展开;在cpp中定义,可能编译器当作函数看待了,不是真正的inline。而且不能在头文件中声明,在cpp中实现,会有编译告警(gcc)。最好不要在构造函数用inline,有可能不会隐式加上基类初始化等隐藏代码。原创 2011-06-09 11:38:00 · 656 阅读 · 0 评论 -
自己写的一个ASSERT宏
<br /><br />//带返回值的ASSERT<br />#define R_ASSERT(EXP, RET)/<br /> if (!(EXP)){/<br />UB_LOG_WARNING("R_ASSERT(%s) failed! file:%s, line:%d.", #EXP, __FILE__, __LINE__);/<br />return RET;/<br /> }原创 2011-02-14 11:21:00 · 636 阅读 · 0 评论 -
VS分布式编译工具 incredibuild
<br />http://baike.baidu.com/view/3957592.htm原创 2011-03-04 16:31:00 · 2879 阅读 · 0 评论 -
at night,do you turn offf your cell phone?
2006-04-06 13:24:42 Today,my friend asked me a question.At night, do you turn off your cell phone?If you don`t ,whom do you leave it on for? I usually do not turn off y cell phone.原创 2008-01-17 15:38:00 · 517 阅读 · 0 评论 -
C语言中auto,register,static,const,volatile的区别
(1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。 (2)register 这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。 (3)static 常见的两种用途: 1>统计函数被调用的次数原创 2008-04-02 11:40:00 · 1160 阅读 · 0 评论 -
double中保留小数点后指定长度位数
今天查了一下,在c++中似乎没有直接为double(或float)指定小数点后长度的方法(不是说输出时候设置精度)。有一种方法是现将double型数据转成字符串,然后再进行相应操作。下面的代码是另一种方法。基本思想是先将都double相应的乘以10的倍数,然后将其转成int型再以相同的10的倍数处之(注意,除数后必须有.0,例如10.0,否则结果不对,不知为什么)。代码如下:#includ原创 2008-04-01 21:33:00 · 9689 阅读 · 1 评论 -
两个数比较,不用“if”,“? :”,“switch”
两个int型数据进行比较,不用任何“if”, “? :”, “switch” or other judgement statements。实现如下:int max_int(int a,int b)...{ b = a - b; a -= b & (b>>31); return a;}当b所以右移31原创 2008-04-02 19:33:00 · 1376 阅读 · 0 评论 -
关于sort的一篇文章
《Effective STL》 ?How can I sort thee? Let me count the ways.当很多程序员想到排序对象时,只有一个算法出现在脑海:sort。(有些程序员想到qsort,但一旦他们看了条款46,他们会放弃qsort的想法并用sort的想法取代之。)现在,sort是一个令人称赞的算法,但如果你不需要你就没有必要浪费表情。有时候你不需要完全排序。比如原创 2008-03-14 08:41:00 · 605 阅读 · 0 评论 -
变量名前的下划线
类变量名前加下划线是为了说明该变量为private,与public变量相区分(primer等著作中这样用)。在有些情况下也是为了区分变量和成员函数。不过没有特别规定。只是一个style的问题。原创 2008-02-27 20:28:00 · 3014 阅读 · 0 评论 -
深入剖析C/C++函数的参数传递机制
深入剖析C/C++函数的参数传递机制C语言的函数入口参数,可以使用值传递和指针传递方式,C++又多了引用(reference)传递方式。引用传递方式在使用上类似于值传递,而其传递的性质又象是指针传递,这是C++初学者经常感到困惑的。为深入介绍这三种参数传递方式,我们先把话题扯远些:1、 C/C++函数调用机制及值传递:在结构化程序设计方法中,先辈们告诉我们,采用“自顶向下,逐步细化”的方法将一转载 2008-02-27 20:25:00 · 1072 阅读 · 0 评论 -
vector为什么没有sort方法
STL是对性能有苛求的库实现。通常容器在与外部算法合作能够有最佳的性能表现,而且具备使用该算法的条件(通常是合适的参数如迭代器,则该容器就不提供具体的成员函数来实现这种算法。例如vector与Algorithms中的sort算法合作,就可以提供最佳性能的排序操作,因此而不提供sort成员函数。这样作对泛型设计有较大的好处。而list则相反,因为list不支持随机存取迭代器,故不能使用Algor原创 2008-02-27 20:22:00 · 1755 阅读 · 0 评论 -
c++类中变量初始化顺序与声明顺数一致
#include iostream>using namespace std; class Obj...{public: Obj(int k):j(k),i(j)...{} void print() ...{ coutiendljendl; }private: int i; //如果i,j的位置互换,输出将不同 int j;};int m原创 2008-02-24 11:05:00 · 706 阅读 · 0 评论 -
c语言标准输入结束符
C语言中标准输入的结束符,在windows下是ctrl+z,在Linux下是Ctrl+d。知识是积累的,积累是为了遗忘......受不了,有些最基础的东西反而会很容易忘掉原创 2008-01-16 19:11:00 · 3329 阅读 · 0 评论 -
g++使用
用法:g++ [选项] 文件...选项: -pass-exit-codes 在某一阶段退出时返回最高的错误码 --help 显示此帮助说明 --target-help 显示目标机器特定的命令行选项 (使用‘-v --help’显示子进程的命令行参数) -dumpspecs 显示所有内建原创 2008-05-27 19:25:00 · 5708 阅读 · 0 评论 -
写的一个打乱文件行顺序的程序,效率还不错。
<br />#include <iostream>#include <vector>#include <algorithm>#include <string>#include <stdlib.h>#include <time.h>using namespace std;vector<string> lines;int main(int argc, char **argv){ if( argc < 2 ) { fprintf(s原创 2010-10-28 14:53:00 · 4013 阅读 · 0 评论 -
qsort 线程不安全
<br />问题:<br />tieba和favo程序在启动时出core,位置在qsort,(signal 8),算术错 <br />定位:<br />栈的结构如下:<br />#0 0x4202a801 in qsort () from /lib/i686/libc.so.6 <br />#1 0x0804e74e in getFinalBSRes (databuf=0x406697fc) at frasbs.cpp:128 <br />#2 0x0804ea74 in adjustDiffBSResOr原创 2010-09-08 17:30:00 · 2461 阅读 · 0 评论 -
ShellExecute
ShellExecute原创 2010-06-10 11:17:00 · 703 阅读 · 0 评论 -
c++中struct和class的区别
原创 2008-12-23 21:59:00 · 629 阅读 · 0 评论 -
#pragma comment应用
原创 2008-12-21 20:28:00 · 522 阅读 · 0 评论