- 博客(58)
- 收藏
- 关注
原创 菱形继承二义性解决方法--虚拟继承
//虚拟继承是为了解决多重继承而出现的,比如/* A / \ B C \ / D如果直接class A{};class B : public A{}class C : public A{}class D : public B, public C{}那么在创建D的对象时候,将会生成2个A对象,1个B对象,1个C对象
2014-08-14 21:36:14
716
原创 公有继承、私有继承、保护继承的测试
测试代码如下,分析见注释#include using namespace std;class Base{private: int m_private;public: int m_public;protected: int m_protectd;};class PublicChild : public Base //在公有继承中,父类中除了私有的成员变量及成员函数,其他
2014-08-14 20:10:56
446
原创 单类及继承类的构造函数、赋值函数、拷贝构造函数等测试
先看测试代码#includeusing namespace std;class A{public: A() { cout << "A Constructor!" <<" Address :"<< this << endl; } A(int i) { cout << "A Constructor with Para!"<<" Address :"<< this
2014-08-14 20:08:36
407
原创 设计模式实现(二十)---职责链模式(Chain of Responsibility)
职责连模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并
2014-08-12 10:12:15
304
原创 设计模式实现(十九)---命令模式(Command)
命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
2014-08-12 08:49:46
390
原创 设计模式实现(十八)---桥接模式(Bridge)
对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。
2014-08-12 07:53:34
391
原创 pthread-win32配置方法及pthread_mutex测试
1.下载pthreads-w32-2-8-0-release.exe下载地址:ftp://sourceware.org/pub/pthreads-win322. 安装pthreads-w32-2-8-0-release.exe 双击pthreads-w32-2-8-0-release.exe,点击Browse选择安装到的目录,然后点击Extract解
2014-08-04 19:01:53
1830
原创 设计模式实现(十六)---迭代器模式(Iterator)
迭代器在比较高级的语言如Java,C#,C++中都已经集成进语言中,所以平时使用的并不过。学习该设计模式
2014-08-01 21:43:27
395
原创 设计模式实现(十五)--- 组合模式(Composite)
组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。何时使用组合模式:当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了。组合模式这样就定义了包含人力资源部和财务部这些基本对象和分公司、办
2014-08-01 20:13:35
378
原创 设计模式实现(十四)--- 备忘录模式(Memento)
备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以讲该对象恢复到原先保存的状态。
2014-08-01 18:29:56
389
原创 设计模式实现(十三)--- 适配器模式(Adapter)
适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。在GoF的设计模式中,对适配器模式讲了两种类型,类适
2014-07-31 13:20:04
502
原创 设计模式实现(十二)--- 状态模式(State)
状态模式(state):当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况(也就是if过于多的情况)。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。当然,如果这个状态判断很简单,那么就没必要使用状态模式了。。。感觉这个设计模式有点作孽啊,用了设计模式比直接if判断还
2014-07-31 09:52:08
342
原创 设计模式实现(十一)--- 抽象工厂模式(Abstract Factory)
因为客户的需求变化,在设计系统项目的时候有时候会更换数据库,如果数据库的实现单纯根据数据库单独实现,没有考虑到以后的复用的话,那么在下一个类似的系统但使用不同的数据库项目时,需要修改大量的代码才可以实现功能。我们可以根据抽象工厂模式,将不同的数据库系统分别做成不同的类,都继承自同一个父类。那么在以后的项目中就可以利用多态的特性,调用父类工厂指针生成对应的数据库对象,来满足功能要求。抽象
2014-07-31 09:41:35
364
原创 设计模式实现(十)--- 观察者模式(Observer)
观察者模式:顶一了一种一堆多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。观察者与通知者,你中有我,我中有你。为了降低偶尔,针对抽象进行抽象。将抽象类的指针或者引用作为成员变量,这样就可以充分的利用多态的性质。观察者的特点:将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致
2014-07-30 17:58:42
381
原创 设计模式实现(九)--- 建造者模式(Builder)
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,我们需要应用一个设计模式,“建造者模式(Builder)”,又叫生成器模式。建造者模式可以讲一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们用了建造者模式,那么用户就只需指定需要建造的类型可以得到它们,而具体建造的过程和细节就不需要知道了。
2014-07-29 21:06:14
441
原创 设计模式实现(七)--- 模板方法模式(Template Method)
概述:如果继承有意义,就应该要称为子类的模板,所有重复的代码都应该上升到父类中区,而不是让每个子类都一一重复。当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可定重定义该算法的某些特定步骤。
2014-07-29 16:41:17
370
原创 设计模式实现(六)--- 原型模式(Prototype)
原型模式(Prototype),是原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。
2014-07-29 15:34:29
361
原创 设计模式实现(五)--- 工厂方法模式(Factory Method)
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。但是在需要为工厂新加功能的时候,就不得不更改工厂中的代码,增加实例化该功能类的判断条件。违背了开放-封闭原则(对外扩展开放,对内修改封闭)。
2014-07-28 20:37:15
382
原创 设计模式实现(三)---装饰模式
装饰者模式实现概要#include #include //Component类class Component{public: virtual void Operation() = 0;};//ConcreteComponent类class ConcreteComponent : public Component{public: void Operation(){prin
2014-07-25 09:58:37
470
原创 优先队列(堆序结构)
/*二叉堆:结构性质: 是一个被完全填满的二叉树,有可能的例外是在底层,底层上的元素从左侧到右侧填入。 这样的树称为完全二叉树。(copmlete binary tree) 容易证明一颗高为h的完全二叉树有2^h到2^(h+1) - 1个节点。 因为完全二叉树很有规律,所以它可以用一个数组表示,不需要指针。对于数组中任一位置i上的元素, 其左儿子在位置2i上,其右儿子在左儿子后
2014-07-21 18:15:52
399
原创 c++primer 4 学习笔记--第7章
7.2. 非const引用形参只能与完全同类型的非const对象关联,而const引用形参可以进行类型转换
2014-06-25 14:29:25
340
转载 C++空类默认函数
原地址:http://blog.sina.com.cn/s/blog_5f76aaf20100cwlj.htmlcutex的博客定义一个空的C++类,例如class Empty{}一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,一般编译过去就相当于class Empty{pu
2014-06-24 17:35:17
390
原创 数据结构与算法分析学习笔记--第五章--散列---分离链接法
在散列表中,如果当一个元素被插入时,另一个元素已经存在(散列值相同,也就是键相同),那么就会产生
2014-06-13 21:56:17
445
原创 操作系统学习笔记------进程描述与进程状态变化
进程控制块PCB的组织方式 1)线性表方式:不论进程的状态如何,将所有的PCB连续地存放在内存的系统区。这种方式适用于系统中进程数目不多的情况。 2)索引表方式:该方式是线性表方式的改进,系统按照进程的状态分别建立就绪索引表、阻塞索引表等。 3)链接表方式:系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等
2014-06-11 21:43:16
1002
原创 数组指针,指针数组
#include int main(){ static int m[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };/* 定义二维数组m并初始化*/ int(*p)[4];//数组指针 p是指针,指向一维数组,每个一维数组有4个int元素 int i, j; int *q[3];//指针数组 q是数组,数组元素是指针,3个int指针
2014-06-10 17:02:44
372
原创 数据结构与算法分析学习笔记--第四章AVL树
#include using namespace std;templateclass AVL_Node{public: AVL_Node *m_left; AVL_Node *m_right; T m_data; unsigned int m_hight;public: //构造函数 AVL_Node(T data = T(), AVL_Node *left = NULL,
2014-06-07 16:40:01
480
转载 struct pollfd
struct pollfd2010年04月15日 星期四 下午 03:59int poll (struct pollfd *fds, size_t nfds , int timeout);struct pollfd {int fd; /* 文件描述符 */short events; /* 等待的事件 */short revents; /*
2014-06-07 14:59:48
1013
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人