- 博客(33)
- 资源 (6)
- 收藏
- 关注
原创 static和extern的用法
定义全局变量时使用static,意味着该变量的作用域只限于定义它的源文件中,其它源文件不能访问。既然这种定义方式出现在头文件中,那么可以很自然地推测:包含了该头文件的所有源文件中都定义了这些变量,即该头文件被包含了多少次,这些变量就定义了多少次。// head.h#ifndef _HEAD_H_#define _HEAD_H_#include <iostream>usi...
2019-09-04 16:06:45
1028
原创 C++ volatile关键字
反汇编:当输出a的时候直接取出5的值,而不是取a所在地址的值。因为a是const变量,编译器对a在预处理的时候就进行了替换。编译器只对const变量的值读取一次,const常量只是一个编译期间的常量。加volatile关键字:反汇编:当输出a时,取a所在地址的值。总结:1、volatile影响编译器编译的结果,指volatile变量是随...
2019-08-31 14:32:14
145
原创 可变参数
/* * @Date: 2019-8-27 11:44:24 * @Author: tracycw * @Description: 可变参数 */#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <stdarg.h>using namespace std;double avera...
2019-08-27 14:02:50
177
原创 回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 假设我们要使用一个排序函数来对数组进行排序,那么在主程序(Main program)中,我们先通过库,选择一个库排序函数(...
2019-03-15 11:59:50
207
原创 局部变量和局部指针变量的返回
/* * @Date: 2019-3-12 * @Author: tracycw * @Description: 局部变量、局部指针变量的返回 为什么不能返回局部指针变量,却可以返回局部变量 函数的局部变量用作返回值时,会生成一个局部变量的拷贝用作返回值,之后局部变量会被系统回收, ...
2019-03-12 16:35:12
884
原创 C语言声明的优先级规则
A 声明从它的名字开始读取,然后按照优先级顺序依次读取 B 优先级从高到低依次是: B.1 声明中被括号括起来的那部分 B.2 后缀操作符: 括号()表示这是一个函数,而方括号[]表示这 是一个数组 B.3 前缀操作符: 星号*表示:"指向...的指针" ...
2019-03-10 17:41:26
765
原创 数组名和取数组首地址的区别
#include <iostream>using namespace std;int main(){ int arr[5] = {1,2,3,4,5}; cout <<" arr = " << arr << endl; cout <<" &arr = "
2019-03-10 17:37:46
4270
2
原创 遗忘的cctype函数
/* * @Date: 2019-3-08 * @Author: tracycw * @Description: cctypeh函数 isalnum(c) 如果c是字母或数字,则为TRUE isalpha(c) 如果c是字母,返回TRUE iscntrl(c) 如果c是控制字符,返回...
2019-03-08 09:30:02
258
原创 24.解释器模式
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 案例:简谱到音乐的转译(音乐简谱中描绘乐曲用的是1234567,而实际发出的声音却是"哆瑞咪发嗦啦西")。#include <iostream>#include <string>#include <vector>#include <ss...
2019-03-06 14:25:06
184
原创 23.迭代器模式
定义:提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。 1、迭代器角色(Iteractor): 负责定义访问和遍历元素的接口 2、具体迭代器角色(Concrete Iteractor): 实现迭代器接口,并要记录遍历中的当前位置 3、集合角色(Aggregate): 负责提供创建具体迭代器角色的接口 4、具体集合角色(Concrete Aggregat...
2019-03-06 14:23:55
196
原创 22.组合模式
将对象组合成树形结构以表示"部分-整体"的层次结构。组合使得用户对单个对象和组合对象的使用具有一致性。#include <iostream>#include <string>#include <list>using namespace std;// 抽象类: 公司class Company{public: Company(string...
2019-03-05 16:47:16
244
原创 21.备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。#include <iostream>#include <vector>using namespace std;// 需要保存的信息class Memento{public: Memento(int hp, int at, int df) : m_Hp(hp), m_At(...
2019-03-05 16:46:19
229
原创 20.访问者模式
表示一个作用于某对象结构的各元素的操作。它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作 案例:假设你的电脑(Element)坏了,找售后,售后告诉你需要拆机检测,检测过程由两个技术人员(Visitor)依次负责不同功能的检测。电脑的部件是固定的,不会有太大的改变,但是如果一种检测方式没有找出问题的话,那么就需要增加检测项。符合访问者模式的特点。#include <...
2019-03-05 16:43:37
216
原创 19.原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其中有一个词很重要,那就是拷贝。 #include <iostream>using namespace std;class Resume{public: Resume() {} ~Resume() {} virtual Resume* clone() = 0; virt...
2019-03-05 16:42:09
241
原创 18.责任链模式
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 案例:员工加薪,一级一级往上申请。这就是典型的职责链模式,请求的处理形成了一条链,直到有一个对象处理请求。#include <iostream>#include <stri...
2019-03-05 16:41:05
206
原创 17.状态模式
状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。它有两种使用情况:(1)一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。(2)一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。 案例:英雄联盟杰斯切换形态攻击#include <iostream>using n...
2019-03-05 16:38:54
263
原创 16.命令模式
我们去烧烤摊吃烧烤,我们是通过服务员来点菜,具体是谁来做和他们什么时候完成,其实我们都不知道。抽象之,“菜单请求者”我们和“菜单实现者”烧烤师傅,2者之间是松耦合的,我们对这些菜的其他一些请求比如“撤销,重做”等,我们也不知道是谁在做。其实这就是本文要说的Command模式。 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作...
2019-03-05 10:13:00
258
原创 15.观察者模式
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 #include <iostream>#include <list>using namespace std;// 抽象英雄类(观察者)class AbstractHero{public: virtual v...
2019-03-05 09:16:32
254
原创 14.享元模式
想想我们编辑文档用的office,文档里文字很多都是重复的,我们不可能为每一个出现的汉字都创建独立的空间,这样代价太大,最好的办法就是共享其中相同的部分,使得需要创建的对象降到最小,这个就是享元模式的核心,即运用共享技术有效地支持大量细粒度的对象。 享元对象能做到共享的关键是区分内蕴状态(InternalState)和外蕴状态(ExternalState)。 内蕴状态是存储在享...
2019-03-04 17:31:13
289
原创 13.桥接模式
将抽象部分与它的实现部分分离,使它们都可以独立地变化。 #include <iostream>using namespace std;// video抽象类class Video{public: virtual void play_video() = 0;};// mpegclass MPEG : public Video{publi...
2019-03-04 16:04:26
350
原创 12.装饰模式
装饰模式:动态地给一个对象添加一些额外的职责 一般情况下可用继承实现类的功能拓展 #include <iostream>using namespace std;// 英雄抽象类class AbstractHero{public: virtual void show_status() = 0;public: int m_Hp; ...
2019-03-04 15:44:06
340
原创 11.中介者模式
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 #include <iostream>#include <string>using namespace std;class Mediator;class Person{public: vi...
2019-03-04 15:10:03
317
原创 10.代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问。 #include <iostream>using namespace std;// 租房抽象类class Renter{public: virtual void rent_house() = 0;};// 具体租客:ZhangSanclass ZhangSan : publ...
2019-03-04 14:25:05
303
原创 9.适配器模式
适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。对象适配: 类适配: #include <iostream>using namespace std;// 俩孔插座class SocketWithTwoHole{public: virtual v...
2019-03-04 11:58:25
330
原创 8.策略模式
策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异。用策略模式来封装算法,效果比较好。 #include <iostream>using namespace std;// 排序算法抽象类class Abstr...
2019-03-04 11:11:29
354
原创 7.外观模式
外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来。客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构。 #include <iostream>using namespace std;...
2019-03-04 10:57:27
408
2
原创 6.建造者模式
建造者模式的优缺点优点: 1、降低代码耦合度。在建造者模式中,客户端不需要知道产品内部是如何实现的,我们只需得到产品的对象。并且使用导演者和建造者分离组装过程和组件具体构造过程,具有灵活的扩展性。 2、优秀的扩展性。具体建造者相互独立,方便扩展,符合开闭原则。缺点: 一定的使用范围限制。建造者模式的产品的组件基本相同,如果产品的差异性较大,建造者模式就不适用了。比较 ...
2019-03-04 10:09:11
560
原创 5.模版方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 #include <iostream>using namespace std;// Builder(建造工厂)class Builder{public: virtual void build...
2019-03-04 10:05:54
401
原创 4.抽象工厂模式
在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。为了更清晰地理解工厂方法模式,需要先引入两个概念:产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视...
2019-03-01 15:04:10
203
原创 3.工厂方法模式
简单工厂方法不符合开闭原则,增加按钮功能需要修改工厂类。现在对该系统进行修改,不再设计一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成,我们先定义一个抽象的按钮工厂类,再定义具体的工厂类来生成圆形按钮、矩形按钮、菱形按钮等,它们实现在抽象按钮工厂类中定义的方法。这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的产品,如果出现新的按钮类型,只需...
2019-02-28 18:15:42
139
原创 2.简单工厂模式
考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂...
2019-02-28 18:01:33
180
原创 1.单例模式
设计模式:单例模式#include &amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;gt;using namespace std;// 单例模式:懒汉式和饿汉式// 懒汉式class SingletonLazy{private: SingletonLazy() {}; // 私有构造函数,外部不能知道new对象public: static Single
2019-02-28 11:40:41
125
转载 C++内存管理
转载自http://www.cnblogs.com/lancidie/archive/2011/08/05/2128318.htmlC++内存管理[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为
2016-11-24 15:08:29
309
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人