设计语言
宇华
皓月满轮玉宇无尘千顷碧 紫箫一曲银河有焰万里春 上善若水
展开
-
8、适配器(Adapter)
其核心情况是,main的运行需要使用interface_need类接口,但是新的系统不能提供interface_need接口,不过有另一套接口interface_now类,interface_now可以完全实现interface_need接口的功能,那么将interface_now类接口转换成interface_need类接口形式。interface_need有一下几个接口:原创 2015-10-14 14:58:26 · 290 阅读 · 0 评论 -
编译器对构造函数的调用
三种不同类的初始化方式 Test t1(5); //标准初始化方式Test t2 = 5; //拷贝构造函数 // 给Test(int i)前加explicit会报错Test t3 = test(5); //手动调用构造函数 //给Test(const Test& obj)前加explicit会报错在现代的编译器中这三种初始化方式是等价的。 C++原创 2015-10-14 14:38:10 · 496 阅读 · 0 评论 -
3、单例模式(Singleton)
只允许工作者甲(这一个工作者)来完成工作区域内所有的甲工作,不允许再指派完成甲工作的工作者(不能再new),那么不管谁需要完成甲工作,都必须去找工作者甲来完成。main{ 定义工作者甲指针 *pWorker1; (指定者一 找到工作者甲) 定义工作者甲指针 *pWorker2; (指定者二 找到工作者甲) pWorker1设置工作者甲的info信息为A; 指定...原创 2015-10-06 13:26:43 · 249 阅读 · 0 评论 -
1、Strategy策略模式
Strategy策略模式原创 2015-07-01 07:54:50 · 305 阅读 · 0 评论 -
类的静态成员能用来干嘛
对象数目控制一个类最多只能有一个对象存在于系统中,如何实现?(单例模式)(插入14-3.cpp)无状态函数和状态函数 无状态函数:函数的调用结果只与实参相关状态函数:函数的调用结果不仅与实参值相关而且还与之前的函数调用有关。(插入14-4.cpp)代码中两种函数实现的问题:fib1是以无状态函数的方式实现的,求解数列每一项时都会做重复的循环,时间复杂度原创 2015-10-14 14:39:18 · 483 阅读 · 0 评论 -
2、代理模式(Proxy)
要完成一件工作,而是找其代理来完成,而不是直接调用工作者,代理和具体工作者继承同样的接口类,代理需要工作者作为参数来构造或者说初始化,让代理的各接口调用具体工作累对应的接口,从而调用代理的接口实质上就调用了工作者的接口。main{ 定义代理甲指针 *pProxyjia 创建代理类实体并赋值给指针 pProxyjia = new Proxyjia(new原创 2015-09-28 15:20:48 · 312 阅读 · 0 评论 -
C++和C的区别
关系:1、C++继承了所有的C特性2、C++在C的基础上提供了更多更好的语法和特性3、C++的设计目标是运行效率和开发效率的统一加强:1、C++中所有的变量都可以再需要使用时再定义(如 for循环等中需要的变量)2、register:C语言用register告诉编译器将局部变量存储于寄存器之中;C++兼容register,但可以取地址,不使用register时也可能原创 2015-06-29 08:22:30 · 302 阅读 · 0 评论 -
11、桥梁模式(Bridge)
桥梁模式的模型: 火车 产品A 商人 赚钱 桥梁 产品B 产品属性原创 2016-04-11 17:28:13 · 285 阅读 · 0 评论 -
12、命令模式(command)
原始工作流程:命令人 找甲 让其做甲A--》甲B--》甲D (完成1任务) 找乙 让其做乙A--》乙C--》乙E (完成2任务) 找丙 让其做丙A--》丙C--》丙D (完成3任务)命令模式工作流程:(将每个任务封装成一个命令类原创 2016-04-11 17:57:53 · 243 阅读 · 0 评论 -
13、装饰模式(Decorator)
装饰模式,动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。假设张三的家长要查看张三的成绩,那么要通过学校成绩报告来查询,那么我们现在设定一下成绩报告。首先有成绩单类ISchoolReport(ISchoolReport时最终的数据来源模板,ISchoolReport基类模板) 基类可以查看整体报告,可以通过姓名查看个人成绩。每个年级的原创 2016-04-11 18:00:55 · 192 阅读 · 0 评论 -
14、迭代器模式(Iterator)
迭代器模式:宗旨提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。迭代器模式的本质就是迭代器,其实迭代器模式就是用迭代器来实现对元素(类或者变量等)的管理。图示: Project 类原创 2016-04-11 19:14:49 · 270 阅读 · 0 评论 -
15、组合模式(Composite)
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合的使用具有一致性。main(),客户CCorpNode,抽象基类,实现基本信息CBranchNode,树枝节点,实现Addordinate()函数和GetSubordinate()函数CLeafNode,叶子节点,IsLeaf属性总是“true”说明:组合模式主要是实现在CB原创 2016-04-18 15:32:36 · 229 阅读 · 0 评论 -
16、观察者模式(Observer)
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。main(),IObservable,被观察者接口CHanFeiZiObservable,被观察者韩非子IObserver,观察者接口CLiSiObserver,观察者李斯CZhouSiObserver观察者周斯说明:将观察者聚集到被观察者韩非子身边,韩非原创 2016-04-18 15:34:10 · 428 阅读 · 0 评论 -
17、责任链模式(ChainofResponsibility)
概念:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。main(),客户IWomen,发出请求者接口Women,请求者实现类Handler,处理请求抽象类Father,处理请求实现类,责任链之一Husband,处理请求实现类,责任链之二Son,处理请求实现类,责任链之三原创 2016-04-18 15:35:25 · 237 阅读 · 0 评论 -
十二、 操作符重载
使用C++标准库 C++标准库并不是C++语言的一部分 C++标准库是由C++语言编写而成的类库和函数的集合 C++标准库中定义的类和对象都位于std命名空间中 C++标准库的头文件都不带.h后缀 C++标准库涵盖了C库的功能 C库中头文件对应C++的C++标准库预定义了多数常用的数据结构,如:字符串,链表,队列,栈等原创 2015-10-07 11:27:32 · 313 阅读 · 0 评论 -
5、工厂方法模式(FactoryMethod)
第一种分类:简单工厂模式 简单工厂模式,使用工厂的创建产品函数(参数为要创建的产品)创建产品。main{ 定义工厂指针 *pSimpleHumanFactory 定义产品指针 并使用工厂指针创建产品A赋值给产品指针 IHuman *pYellowHuman = pSimpleHumanFactory->CreateHuman("YellowHuman");原创 2015-10-06 13:44:31 · 235 阅读 · 0 评论 -
SPI
SPI1、原理图 SPI芯片Al01790D(M95XXX)2、挂载模型3、时序图硬件中可以接很多个SPI芯片,通过片选GPIO来选择跟哪个SPI芯片通信(激活哪个SPI芯片)。2440支持4中不同的SPI接口数据传输格式,也就是有四种时序图。第一种:读:写:第二种:读:写:第三种:读:原创 2015-07-02 08:17:46 · 347 阅读 · 0 评论 -
指针与引用的区别
引用是一个已经定义变量的别名,Type& name = var; 指针是一个变量,其值为一个内存地址,通过指针可以访问对应内存地址中的值引用只是一个变量的新名字,所有对引用的操作(赋值,取地址等)都会传递到其引用的变量上指针可以被const修饰成为常量或者只读变量const引用使其引用的变量具有只读属性指针就是变量,不需要初始化,也可以指向不同的地址原创 2015-09-25 10:39:20 · 219 阅读 · 0 评论 -
引用的本质就是指针常量
从使用C++语言的角度来看 引用与指针常量没有任何的关系 引用是变量的新名字,操作引用就是操作对应的变量从C++编译器的角度来看 为了支持新概念“引用”必须要一个有效的解决方案 在编译器内部,使用指针常量来实现“引用” 因此“引用”在定义时必须初始化原创 2015-09-25 10:41:42 · 2618 阅读 · 0 评论 -
extern"C"
extern"C"告诉C++编译器将其中的代码进行C方式的编译 C方式的编译主要指按照C语言的规则对函数名进行编译 函数名经过编译后可能与源码中的名字有所不同 C++编译器为了支持重载,函数名经过编译后会加上参数信息,因而编译后的函数名与源码中完全不同C编译器不会在编译后的函数名中加上参数信息extern"C"中的冲在函数经过C方式编译后将得到相同的函数名,因此e原创 2015-09-25 10:44:50 · 220 阅读 · 0 评论 -
C++编译器对字面量的处理方式
C++编译器对字面量的处理方式 整数型字面量的默认类型为int,占用4个字节浮点型型字面量的默认类型为double,占用8个字节字符型字面量的默认类型为char,占用1个字节字符串型字面量的默认类型为const char*,占用4个字节 当使用字面量对变量进行初始化或赋值时 无溢出产生:编译器对字面量进行默认类型转换原创 2015-09-25 10:46:22 · 819 阅读 · 0 评论 -
C++中不允许定义引用数组
首先,什么叫引用数组?顾名思义,就是一个数组,这个数组的每一个元素是一个引用。其次,C++中引用的本质是一个指针常量,编译过程中使用常指针作为引用的内部实现。int a;int * const p = &a;int &r = a; 可以这样理解 p 和 r 除了语法之外,其实质是完全等价的。另外:常量在定义时必须初始化,那么引用在定义时也同样必须初始化。原创 2015-07-02 08:39:25 · 4806 阅读 · 0 评论 -
6、门面模式(Facade)
门面模式,为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这个子系统更容易使用。简单说,就是将复杂的逻辑封装起来,对外公开简单的接口,由客户调用。 main{ //正常调用: 定义工作者接口指针,并创建工作者,赋值给接口指针 ILetterProcess *pLetterProcess = new CLetterProc原创 2015-10-07 11:23:32 · 395 阅读 · 0 评论 -
7、抽象工厂模式(AbstractFactory)
客户需要一系列的多种产品,这些产品有都是由四个零件组成,其中三个零件a,b,c 需要工厂甲或工厂丙生产,零件d由工厂乙或者工厂丁生产。 首先客户给出产品清单:黄男,黄女,白男,白女,黑男,黑女。第一步:根据清单,所有的产品都有四个相同系列的零件组成,是通一种产品人,只是其规格不同。那么定义一个人的产品索引模板(产品指标表格):IHuman 第二步:原创 2015-10-07 11:24:18 · 263 阅读 · 0 评论 -
面向对象的概念
基本概念: 类和对象是面向对象中的两个基本概念 “类”指的是一类事物,是一个抽象的概念 “对象”指的是属于某个类的一个实体,是一个具体存在的事物 ( 类是一种“模板”,可以通过这种模板创建出不同的对象“实例” 对象“实例”是类“模板”的一个具体实现 ...原创 2015-10-06 13:31:56 · 399 阅读 · 0 评论 -
八:类的封装
类通常分为以下两个部分类的使用方式当使用类时,不需要关心其实现细节当创建一个类时,才需要考虑其内部实现细节例:使用手机时,只需要知道如何发短信,打电话,拍照等待即可,不需要关心手机是如何开发出来的。手机开发工程师就需要考虑手机的内部实现细节,如硬件细节和软件细节封装的基本概念根据日常生活中的经验:并不是类的每个属性都是对外公开的属性如:女孩子不希望外人知道自原创 2015-10-06 13:34:10 · 285 阅读 · 0 评论 -
4、多例模式(Multition)
单例模式只允许有一个工作者(new一次),多例模式允许有N个工作者(可以new N次),超过N的获取随机或者已某种规则返回N个实例中的一个。main{ 定义工作者甲指针 *pWorker1; (指定者一 找到工作者甲) 定义工作者甲指针 *pWorker2; (指定者二 找到工作者乙) 定义工作者甲指针 *pWorker3; (指定者二 找到工作者甲乙原创 2015-10-06 13:28:22 · 797 阅读 · 0 评论 -
九、构造与析构
C++中的构造函数如何给对象进行初始化?一般而言所有的对象都需要一个确定的初始状态解决方案 为每个类都提供一个public的initialize函数 对象创建后立即调用initialize函数进行初始化 (插入9-1.cpp) 上述解决方案initialize只是一个普通的函数,必须显示的调用 一旦由于失误的原因,对象没有初始化,那么结果将原创 2015-10-06 13:37:57 · 248 阅读 · 0 评论 -
十一、类的静态成员
成员变量的回顾 通过对象名能够访问public成员变量 每个对象都可以有属于自己的成员变量 成员变量不能在对象之间共享 新的需求 统计类的程序运行期间有多少个对象同时存在 保证程序的安全性,并随时可以获取对象的数目 问题:使用普通的成员变量可行吗?类的静态成员 在C++中可以定义静态成员变量和静态成员函数 静态成员属于整个类原创 2015-10-06 13:42:36 · 248 阅读 · 0 评论 -
malloc与free和new与delete有什么区别
malloc函数的返回值是void* 其所申请的空间需要强制类型转换。 malloc和free是库函数,是以字节为单位申请堆空间 new和delete是关键字,是以类型为单位申请堆空间 malloc和free单纯的对内存进行申请个释放 对于基本类型new关键字会对内存进行初始化 对于类类型new和delete还负责构造函数和析构函数的调用。 具体原创 2015-10-07 11:31:43 · 266 阅读 · 0 评论 -
C++中的引用
C++中的引用1、引用时一个已经定义变量的别名,Type& name = var; 引用必须在声明时使用别的变量来初始化;引用作为变量的别名存在,因此有时可以代替指针。2、C++中可以生命const引用;const Type& name = var; const引用让变量拥有只读属性; C++编译器为初始化的const引用分配空间,引用作为这段内存的别名,即是一个只读变量。3、C++中原创 2015-06-30 10:41:29 · 295 阅读 · 0 评论