自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 一个很好的学习网站

https://www.runoob.com/

2019-08-27 15:53:05 104

原创 EGLImage 替换glreadpixels glTexImage2D 效率提升不明显

1、EGLImage替换glTexImage2D GLuint nIndex = 0; static GraphicBuffer* buffer = new GraphicBuffer(width, height, PIXEL_FORMAT_RGBA_8888, GraphicBuffer::USAGE_HW_TEXTURE | ...

2019-08-26 14:18:45 2158 1

转载 虚函数指针和虚基类指针

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/xiaxzhou/article/details/76576516本文参考了http://www.cnblogs.com/jerry19880126/p/3616999.html上述博客给出了以下结论:每个类都有虚指针和虚表;...

2019-08-19 17:06:37 872

转载 c语言中输入输出格式集合

1.转换说明符%a(%A)浮点数、十六进制数字和p-(P-)记数法(C99)%c字符%d有符号十进制整数%f浮点数(包括float和doulbe)%e(%E)浮点数指数输出[e-(E-)记数法]%g(%G)浮点数不显无意...

2019-07-30 11:05:51 1636

转载 C++中内存分配、函数调用和返回值问题

转载博客:https://www.cnblogs.com/HPAHPA/p/8301625.html在谈述函数调用和返回值问题之前,先来看看C++中内存分配的问题。C++编译器将计算机内存分为代码区和数据区,很显然,代码区就是存放程序代码,而数据区则是存放程序编译和执行过程出现的变量和常量。数据区又分为静态数据区、动态数据区,动态数据区包括堆区和栈区。以下是各个区的作用:(1)代码...

2019-07-26 10:56:10 128

转载 形参和实参

如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值。这一节我们先来讲解C语言函数的参数,下一节再讲解C语言函数的返回值。C语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处,这两个地方的参数是有区别的。形参(形式参数)在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递...

2019-07-26 10:44:59 1348 2

转载 C/C++运算符优先级和口诀

一共有十五个优先级:1 () [] . ->2 ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof3 * / %4 + -5 >> << 6 > >= < <=7 == != 8 & ...

2019-07-26 10:29:04 351

转载 内联函数

C++内联函数与宏定义用内联取代宏:1.内联可调试;2.可进行类型安全检查或自动类型转换;3.可访问成员变量。另外,定义在类声明中的成员函数自动转化为内联函数。文章(一)内联函数与宏定义  在C中,常用预处理语句#define来代替一个函数定义。例如:    #define MAX(a,b) ((a)>(b)?(a):(b))  该语句使得程序中每个出现MA...

2019-07-24 16:26:08 148

转载 C++程序运行过程

对于一个基本的C++程序一般的运行过程如下预处理:主要是头文件的展开,宏的展开编译:这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言汇编:汇编语言转化为机器语言的过程链接:针对一些库进行调用,如一些静态库和,然后组合到目标文件中注意:对于静态库程序在编译链接的时候把库的代码链接到可执行文件中。而对于共享库,链接后文件仅仅包含入口地址...

2019-07-23 14:23:24 1302

转载 C++类的内存对齐

内存对齐内存对齐的原因平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。对齐规则每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数...

2019-07-23 13:54:29 693

转载 【转】new和malloc的区别

1. 申请的内存所在位置  new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。  自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的...

2019-07-23 11:01:43 72

原创 Effective C++ 05

Rule twenty-six尽可能延后变量定义式的出现时间(Postpone variable definitions as long aspossible  ) 如果存在变量没有被用到的情况,变量定义超前,这个定义是无意义的。 default构造比带初值构造更无意义。 总结:尽可能的咽喉变量定义式的出现,这样可以增加程序的清晰度并改善程序效率。  Rule twenty-seven尽可能少做转...

2018-03-29 13:37:26 101

原创 Shader编写的注意

兼容性1、注意小数点,在部分手机内会出现float数据存在小部分偏差。2、尽量少的在将函数当成结果放入到另外一个函数中,例如    vec4 color = getColor(getWidget(), getPos());3、减少if和for的运用,在不同手机内部兼容性存在问题4、避免if内的break和return操作, 特别是if5、谨慎对待数组6、使用swizzle是非常快的,例float4...

2018-03-05 15:39:23 219

原创 Effective C++ 04

Rule eighteen让接口容易被正常使用,不易被误用(Make interfaces easy to use correctly and hardto use incorrectly) 预防错误方法一:导入新类型预防错误Data(Day day, Month month, Year year); 预防错误方法二:限制类型内什么可以做,什么不可以做例如:以const

2018-01-23 10:43:28 125

原创 Effective C++ 03

Rule twelve以对象管理资源(Use objects to manager resources) 标准程序库提供了auto_ptr智能指针关键原理1、获得资源后立即放入管理对象2、管理对象运用析构函数确保资源的释放注意:一个auto_ptr只能指向一个对象,不能指向多个对象auto_ptr的copy只能是一个传递的过程,获取的auto_ptr获取资源,但是原始的auto_ptr指向NULL

2018-01-02 15:34:18 141

原创 Effective C++ 02

Rule five了解C++默默编写并调用那些函数 (Know waht functions C++ silently writes andcalls) 对于一个Empty Class ,C++编译器会为他声明:1.一个copy构造实现简单的non static 对象拷贝2.一个copy assignment操作符实现简单的non static 对象拷贝3.一个析构

2017-12-15 17:10:07 1035

原创 Effective C++ 01

Rule one视C++为一个语言联邦 (view C++ as a federation of languages) 理解C++必须认识其他四种次语言:C,object-oriented  C++,Template C++, STL 总结:C++的高效编程守则视情况而比变化,取决于你使用C++的那个部分 Rule two尽量用const,enum,inline

2017-12-14 17:44:29 123

转载 解释器模式

简介解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 组成对象抽象解释器:声明一个所有具体表达式都要实现的抽象接口(或者抽象类),接口中主要是一个interpret()方法,称为解释操作。具体解释任务由它的各个实现类来完成,具体的解释器分别由终结符解释器TerminalExpression和非终结符解释器Nonterm

2017-12-07 16:16:53 119

转载 享元模式

简介享元模式:运用共享技术有效的支持大量细粒度的对象。 组成对象Flyweight抽象享元角色,一个产品的抽象,定义内部状态和外部状态的接口或者实现。ConcreteFlyweight具体享元角色,实现抽象角色定义的业务。注:内部状态处理和环境无关。unsharedConcreteFlyweight不可共享的享元角色,不存在外部状态或者安全要求,不能够使用共性技术的对象

2017-12-06 10:43:56 151

转载 中介者模式

简介中介者模式:用一个中介对象封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且了以独立的改变他们之间的交互。 组成对象Mediator抽象中介者角色,定义统一接口,用于各个同事角色之间的通信ConcreteMediator具体中介者角色,通过协调各个同事角色实现协作行为,依赖于各个同事Colleague同事角色,每个同事角色都应该知道中介

2017-12-06 10:16:39 117

转载 职责链模式

简介职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并且沿着这条链传递请求,知道有一个对象处理它为止。常用的场景1.有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。 2.在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 3.可动态指定一组对象处理请求。优点:1. 将请求和处

2017-12-04 14:38:03 97

转载 命令模式

简介命令模式:将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销操作。类图 组成对象Receiver接受者角色,就是干活的码农,命令传递打这里就应该被执行。Command命令角色,对命令额封装,所有命令声明在此Invoker调用者角色,接受到命令并且执行命令常用的场景只要认为是命令的地方,eg  GUI

2017-12-04 14:20:54 116

转载 桥接模式

简介桥接模式:将抽象部分与他的实现部分分离,是他们可以独立变化。类图组成对象1、Abstraction::Operation():定义要实现的操作接口2、AbstractionImplement::Operation():实现抽象类Abstaction所定义操作的接口,由其具体派生类ConcreteImplemenA、ConcreteImplemenA或者其他派

2017-12-01 11:08:26 115

原创 单例模式

简介单例模式:保证一个类有且只有一个实例,并提供一个访问它的全局访问点。常用的场景单例模式常常与工厂模式结合使用,因为工厂只需要创建产品实例就可以了,在多线程的环境下也不会造成任何的冲突,因此只需要一个工厂实例就可以了。优点:1.减少了时间和空间的开销(new实例的开销)。2.提高了封装性,使得外部不易改动实例。缺点:1.懒汉式是以时间换空间的方式。2.饿汉

2017-12-01 10:21:06 102

转载 迭代器模式

简介迭代器模式:提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。构成1.迭代器抽象类。2.聚集抽象类。3.具体迭代器类。4.具体聚集类。常用的场景需要对聚集有多种方式的遍历时使用迭代器模式。类图:自行百度。。。测试代码 #include #include #include using namespace std;

2017-11-30 12:34:42 95

转载 组合模式

简介组合模式:将对象组合成树的结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。构成1.Component是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。3.Composite 定义有枝节点行为,用

2017-11-30 10:20:11 110

转载 备忘录模式

简介 备忘录模式: 在不破坏封装性的前提下,捕捉一个对象的内部状态,并在该对象外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。

2017-11-20 15:27:34 112

转载 适配器模式

适配器模式: 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

2017-11-20 15:08:09 102

转载 工厂模式

简介 工厂模式: 工厂模式基本与简单工厂模式差不多,上面也说了,每次添加一个产品子类都必须在工厂类中添加一个判断分支,这样违背了开放-封闭原则,因此,工厂模式就是为了解决这个问题而产生的。 定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使每一个类的实例化延迟到子类.优点 1不用修改已有代码,开放封闭原则: 2对扩展开放,对更改封闭与简单工厂模式区别 简单工厂模式:一个工厂

2017-11-17 16:48:07 138

转载 状态模式

简介 状态模式: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换条件表达式过于复杂时的情况。吧状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。构成 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来

2017-11-17 16:44:30 94

转载 抽象工厂模式

简介 抽象工厂模式: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。构成 产品基类:这里包含产品基类A和产品基类B,这两个产品都从共同的基类继承而来,但是这个继承关系却是在这个模式之外的部分,而本身这个模式关心的是这两个产品基类的差异部分。 具体产品类:这里的具体产品类是产品A1,A2,B1、B2等, 工厂抽象接口:定义了创建产品的接口,这里返回参数是返回的产品A,产

2017-11-17 15:17:53 110

转载 观察者模式

简介 观察者模式: 定义了一个一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象发生变化时,会通知所有的观察者对象,使它们可以自动更新自己。构成 Subject(目标) 目标知道它的观察者。可以有任意多个观察者观察同一个目标; 提供注册和删除观察者对象的接口。 Observer(观察者) 为那些在目标发生改变时需获得通知的对象定义一个更新接口。 ConcreteS

2017-11-16 18:25:45 140

转载 建设者模式

简介 建造者模式: 将一个复杂对象的构建和他的表示分离,使得相同的构造过程可以创建不同的表示。 重点:相同的构造过程产生不同的表示。构成 Product产品类,通过模板方法模式实现,有基本方法和模板方法 Builder抽象建造者,规范产品的组件,一般由子类实现 ConcreteBuilder具体建造者,实现抽象类定义的所有方法,并返回一个创建好的对象 Director导演类,负责安排已

2017-11-16 17:18:29 201

转载 外观模式

简介 外观模式: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。常用的场景 1.在设计初期阶段,应该有意识的将不同的两个层分离。 2.在开发阶段,子系统往往因为不断的重构而变得越来越复杂,我们通过添加外观来提供简单的接口,减少他们的依赖。 3.在维护大型的系统时,系统本身很难进行维护和扩充,新开发的系统添加外观来提供简单的接口实现交互

2017-11-15 14:18:01 107

转载 迪米特原则

简介 迪米特原则: 如果两个类不必彼此通信,那么这两个类就不应当发生直接的相互作用, 如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用。前提 在类的结构设计上每一个类都应当尽量降低成员的访问。实现 一个模块设计的好坏的一个重要标志就是该模块在多大程度上讲自己的内部数据与实现的有关细节隐藏起来。 一个软件实体应当尽可能少的与其他实体发生相互作用。 每一个软件单位对

2017-11-15 13:46:41 308

转载 模板方法模式

简介 模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类当中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的特定步骤。常用的场景 多个子类有共有的方法,并且逻辑相同/逻辑相同,细节有差异。 对重要,复杂的算法,可以讲核心算法设计为模板方法,周边细节由子类实现。 重构时,经常使用的方案,将相同的代码抽象到父类,通过构造函数约束行为。优点 封装不变部分/逻辑框架,

2017-11-15 11:34:36 140

转载 原型模式

#include #include using namespace std;//原型类class FBookProtoType{public: FBookProtoType(){}; ~FBookProtoType(){}; int name; int price; int num; //深拷贝 FBookProtoType* deepClone() { FB

2017-11-02 16:29:40 174

原创 代理模式

简介代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。常用的场景1.虚拟(Virtual)代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。使用虚拟代理模式的好处就是代理对象可以在必要的时候才将被代理的对象加载;代理可以对加载的过程加以必

2017-11-01 15:22:21 149

转载 装饰模式

简介装饰模式:动态的给一个对象添加一些额外的职责,就增加功能而言,装饰模式比生成子类更加灵活。常用的场景如果需要添加新功能,但又不想修改定义好的接口或者抽象类,那么这时候就比较适合装饰模式,例如很多图形系统中的组件,就可以使用装饰模式,来让新的组件在继承现在功能的基础上添加新的功能。装饰模式一般是针对接口或者抽象类的变化,如果是具体实现类的变化,则要考虑适用哪种模式。优点

2017-11-01 14:16:45 114

转载 依赖倒转原则

简介依赖倒转原则:1.高层模块不应该以来底层模块,两个都应该依赖抽象2.抽象不应该依赖细节,细节应该依赖抽象针对接口编程,不要对实现编程 里氏代换原理:子类型必须能够替换调幅类型目的一个应用中的重要策略决定及业务模型正是在这些高层的模块中。也正是这些模型包含着应用的特性。但是,当这些模块依赖于低层模块时,低层模块的修改将会直接影响到它们,迫使它们也去改变。应该高层的

2017-10-09 16:22:39 187

空空如也

空空如也

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

TA关注的人

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