- 博客(35)
- 资源 (10)
- 收藏
- 关注
原创 抽象工厂模式
#include <iostream>#include <string>using namespace std;class IUser{public: virtual void getUser()=0; virtual void setUser()=0;};class SqlUser:public IUser{public: void getUser()
2015-03-31 23:33:02 545
原创 观察者模式
#include <iostream>#include <string>#include <list>using namespace std;class Subject;class Observer{protected: string name; Subject *sub;public: Observer(string name,Subject *sub)
2015-03-31 17:14:09 415
转载 UML类图几种关系的总结
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1.泛化(Generalization)【泛化关系】:是一种继承关系,它指定了子类如何特化父类的所有特征和行为例如:老虎是动物的一种.【箭头指向】
2015-03-31 16:11:23 429
原创 建造者模式(生成器模式)
#include #include #include using namespace std;class Product{private: vector product;public: void add(string str) { product.push_back(str); } void show() { vector::iterator iter=pr
2015-03-31 15:43:31 509
原创 外观模式
GOOD:为子系统的一组接口提供一个一致的界面。使用户使用起来更加方便。#include #include using namespace std;class Sub1{public: void f1() { cout<<"子系统的方法 1"<<endl; }};class Sub2{public: void f2() { cout<<"子系统的方法 2
2015-03-31 14:58:47 440
原创 模板方法模式
GOOD: 把不变的代码部分都转移到父类中, 将可变的代码用 virtual 留到子类重写 .#include#include #include using namespace std;class AbstractClass{public: void Show() { cout<<"我是"<<GetName()<<endl; }protected: virtua
2015-03-31 14:49:53 433
原创 原型模式
GOOD: 从一个对象再创建另外一个可定制的对象, 而无需知道任何创建的细节。 并能提高创建的性能。 说白了就 COPY 技术,把一个对象完整的 COPY 出一份。 #include #include using namespace std;class Prototype{private: string str;public: Prototype(string s) {
2015-03-31 12:07:53 528
原创 工厂方法模式
GOOD:修正了简单工厂模式中不遵守开放-封闭原则。工厂方法模式把选择判 断移到了客户端去实现,如果想添加新功能就不用修改原来的类,直接修改客户端即可。 #include #include using namespace std;class LeiFeng{public: void sweep() { cout<<"扫地"<<endl; } void wash()
2015-03-31 11:55:52 425
原创 代理模式
GOOD:远程代理,可以隐藏一个对象在不同地址空间的事实虚拟代理:通过代理来存放需要很长时间实例化的对象 安全代理:用来控制真实对象的访问权限 智能引用:当调用真实对象时,代理处理另外一些事#include #include using?namespace std //定义接口 class Interface?{ public: virtu
2015-03-31 11:38:41 418
原创 修饰模式
GOOD:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功能) ,就会增加类的复杂度。装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。 #include #include using n
2015-03-31 10:39:49 701
原创 设计模式和工厂模式的结合
//策略基类class COperation{ public: intm_nFirst; intm_nSecond; virtualdoubleGetResult() { doubledResult=0; returndResult; }};//策略具体类—加法类class AddOperation:publicCOperation{public: AddOpe
2015-03-30 18:09:50 512
原创 策略模式
//策略基类class COperation{ public: intm_nFirst; intm_nSecond; virtualdoubleGetResult() { doubledResult=0; returndResult; }};//策略具体类—加法类class AddOperation:publicCOperation{public: AddOpe
2015-03-30 17:39:36 543
原创 简单工厂模式
#include #include using namespace std;class Operation{public: double numberA,numberB; virtual double getResult() { return 0; }};class addOperation:public Operation{ double getResult(
2015-03-30 16:29:42 460
转载 网络编程释疑之:TCP连接拔掉网线后会发生什么
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yaocoder.blog.51cto.com/2668309/1589919背景:前些天团队在进行终端设备和服务器端长连接业务的测试时,发现了这么一个情况:在拔掉设备端的网线后,再插上网线,有时可以继续正常的进行长接连请求,而且用的还是拔掉网线之前的那个长连接。但是有
2015-03-28 22:13:51 1616 1
转载 类的const和非const成员函数的重载
转自:http://blog.csdn.net/anjy/article/details/1819126我们从一个例子说起,来看上一篇文章中的String类, 我们为它提供一个下标操作符([ ])以读写指定位置的字符(char)。只要了解过C++的操作符重载的语法,很快就可以写出下面这个[]操作符重载函数:char& operator[](int posion) //
2015-03-28 08:49:37 609
转载 堆栈的作用,以及存放的数据
在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆:顺序随意栈:后进先出(Last-In/First-Out)堆和栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用
2015-03-25 19:18:54 4502
原创 为什么基类的析构函数是虚函数?
注:本文章内容大部分来自网站整理。1.为什么基类的析构函数是虚函数? 在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 下面转自网络:源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代码 #includeusing namesp
2015-03-25 19:12:10 597
原创 Ubuntu下配置支持samba共享
执行下列命令:$ sudo apt-get install samba$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak$ sudo mkdir -p /home/share$ sudo chmod 777 /home/share修改配置文件$ sudo vim /etc/samba/smb.c
2015-03-24 23:46:28 487
转载 【Linux学习】pthread_create主线程与创建的新线程之间退出关系
我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下。 1、 主线程等待新线程先结束退出,主线程后退出。正常执行。实例代码:[cpp] view plaincopyprint?#include "apue.h" #include pthread_
2015-03-24 10:43:43 900
原创 重载操作符
根据网上的帖子,整理如下:1 并不是所有的操作符都能被重载。除了. ,.* ,:: ,? : ,sizeof,typeid这几个运算符不能被重载,其他运算符都能被重载2 重载不能改变该运算符用于内置类型时的函义,程序员不能改变运算符+用于两个int型时的含义。3 运算符函数的参数至少有一个必须是类的对象或者类的对象的引用。这种规定可以防止程序员运用运算符改变内置类型的函义。4 重载不能改
2015-03-24 08:01:20 452
原创 分布式数据包抓取系统
#include #include #include #include #include #include #include #include #include #include #include#include#includeusing namespace std;//////////////////////////////////////////////////
2015-03-21 22:23:01 840
原创 cannot find -lpthread以及conflicts with new declaration with ‘C’ linkage
cannot find -lpthread:正常情况下,libthread.so库是存在的。然后类似的其他工程也都有编译过了。找了很久发现是在windows下复制过来的makefile带有^M结尾的字符。删掉就好了。conflicts with new declaration with ‘C’ linkage:这种是在使用G++编译C代码的时候,不同的头文件包含了对同一个函数的声明
2015-03-21 15:21:53 1490
原创 VS 2008 Express
偶尔也需要在vs上工作,2008是我比较喜欢的。Just VS 2008 Expresshttp://download.microsoft.com/download/8/B/5/8B5804AD-4990-40D0-A6AA-CE894CBBB3DC/VS2008ExpressENUX1397868.isoVS 2008 Express SP1http://down
2015-03-20 23:32:34 1178
原创 Ubuntu下的MySQL安装与配置
1)首先检查系统中是否已经安装了MySQL 在终端里面输入 sudo netstat -tap | grep mysql 若没有反映,没有显示已安装结果,则没有安装。若如下显示,则表示已经安装 2)如果没有安装,则安装MySQL. 在终端输入 sudo apt-g
2015-03-19 21:26:09 668
原创 僵死进程
僵死进程简而言之就是:子进程退出时,父进程并未对其发出的SIGCHILD信号进行适当处理,导致子进程停留在僵死状态等待其父进程为其收尸,这个状态下的子进程就是僵死进程。在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵死进程,无法正常结束,
2015-03-19 14:11:25 618
原创 Linux下组播&广播消息小例子
组播:// 发送端#include #include #include #include #include #include #include #include #include using namespace std;int main(){ setvbuf(stdout, NULL, _IONBF, 0); fflush(stdout); int
2015-03-18 00:09:28 739
原创 通过socket发送结构体
c/c++通过socket发送结构可以直接先将结构转化到内存中,再通过send直接发送。 在网络通讯过程中往往涉及一些有关联的参数传递,例如数组,结构体之类的。对于结构体其实方法挺简单,由于结构体对象在内存中分配的空间都是连续的,所以可以将整个结构体直接转化成字符串发送,到了接收方再将这个字符串还原成结构体就大功告成了。 首先,我们建立一个结构体。 struct UsrDa
2015-03-17 23:27:08 1348
原创 c++中的模版和多态之间的关系
表面上看:模板与多态本身就是两个东西。模板实例化是发生在编译期(Compile-time)的,而多态中的函数调用决议是发生在运行时(Run-time)。实际上:模板是静多态,模板是在编译时确定的,而平时我们说的多态是动多态,是在运行时确定。也就是多态分为两种:静多态和动多态。
2015-03-16 23:24:29 1706
原创 socket 断线检测 心跳检测
心跳包:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。 在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可
2015-03-16 16:44:20 3386
转载 vector,map,list,queue区别--总结的不错
1。vector (连续的空间存储,可以使用[]操作符)快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间岁间的插入,删除元素要慢,而且如果一开始分配的空间不够的话,有一个重新分配更大空间,然后拷贝的性能开销.2。deque (小片的连续,小片间用链表相连,实际上内部有一个map的指针,因为知道类型,所以还是可以使用[],只是速度没有vector快)快速的访问随机的元素,快速的在
2015-03-16 13:33:38 998
原创 条件变量&互斥锁的使用
线程间的同步技术,主要以互斥锁和条件变量为主. 这是为了避免多线程调度,对数据的修改产生不同步,从而导致条件变量失效的情况。 void *threadone(void *arg) { pthread_mutex_lock(&qlock); while(a<b) { pthread_co
2015-03-16 12:17:51 592
原创 strdup
头文件:#include 定义函数:char * strdup(const char *s);使用man来看一下: The strdup() function returns a pointer to a new string which is a duplicate of the string s. Memory for the new string i
2015-03-15 10:03:10 1154
原创 linux上localtime函数返回的指针
最近在做一个spider,封装的log宏如下:#define SPIDER_LOG(level, format, ...) do{ \ if(level >= g_conf->log_level) {\ time_t now = time(NULL); \ char msg[MAX_MESG_LEN]; \ char buf[32]; \ sprintf(msg, for
2015-03-14 09:17:35 1522
原创 不同平台编译选项出现的位置不同
Ubuntu:g++ -o spider bloomfilter.o confparser.o crc32.o dso.o hashs.o md5.o qstring.o sha1.o socket.o spider.o threads.o url.o -rdynamic -lpthread -levent -lcrypt -ldlcenos:g++ -o spider -rdyn
2015-03-12 12:41:22 615 1
入侵问题及防范措施新人入侵常见问题及WEB防范措施基础\623xr\新人入侵常见问题及WEB防范措施基础
2010-02-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人