- 博客(336)
- 资源 (16)
- 收藏
- 关注
原创 C++ __int64 类型
int64 是有符号 64 位整数数据类型,也就是 C# 中的 long 和 SQL Server 中的 bigint,范围为 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807),存储空间占 8 字节。用于整数值可能超过 int 数据类型支持范围的情况。 Int64 值类型表示值介于 -9
2011-12-09 17:14:26 30074
原创 C++ rand,srand用法
计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。) 我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递
2011-12-09 17:12:06 35483 2
原创 c++ far near
在80286以前的微处理器(CPU)组成的确16位机上,Windows操作系统(包括DOS)对于内存是分段使用的(分段内存模式,Segment Memory Mode)。运行在这些16位CPU微机上的Windows(Windows 1.0-3.1)被称为“Win16”。从80386开始的32位CPU开始,为了兼容,也采用上述分段内存模式,这就导致了near(short)、 f
2011-12-09 17:10:33 1246
原创 C++宏的使用
C/C++宏的使用1. 防止多重包含 22. 条件编译 23. 定义字面值常量 24. 定义为函数 25. 可变参数宏 36. 宏组合 36.1 一般用法 46.2 当宏参数是另一个宏的时候 46.2.1 非'#'和'##'的情况 46.2.2 当有'#'或'##'的时候 46.3 '#'和'##'的一些应用特例 56.3.1 合并匿名变量名 5
2011-12-09 17:09:19 4990 1
原创 C++命名空间
一、 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。 在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。 1、全局变量的作用域是整个程序,在同一作用域中不应有两
2011-12-09 17:05:13 824
原创 C++ iostream标准库
C++的iostream标准库介绍0 为什么需要iostream1 iostream: istream 和 ostream2 fstream: ifstream 和 ofstream3 strstream: ostrstream 和 istrstream4 stringstream5 io_state 输入/输出的状态标志 cin,表示标准输入(sta
2011-12-09 17:00:16 1063
原创 C++ 内存对齐
C++中的内存对齐内存对齐 在我们的程序中,数据结构还有变量等等都需要占有内存,在很多系统中,它都要求内存分配的时候要对齐,这样做的好处就是可以提高访问内存的速度。 我们还是先来看一段简单的程序: 程序一 1 #include 2 using namespace
2011-12-09 16:58:40 585
原创 C++ const用法
C++中CONSTC中常用:“ #define 变量名 变量值”定义一个值替代,然而却有个致命缺点:缺乏类型检测机制,这样预处理在C++中成为可能引发错误的隐患,于是引入const.const使用:1. 用于指针的两种情况:const是一个左结合的类型修饰符.int const *A; //A可变,*A不可变int *const A; //A不可变,*A可变2.限定函数的传
2011-12-09 16:57:30 854
原创 C++ memset详解
问题描述:int * cow = new int[n+1];memset(cow,0,(n+1)*4);将N+1个元素置成0,为什么不行memset是对一个字节的int4个字节,因此*4但是只能为0,其他例如1就不可以,详见最后一个例子memest原型 (please type "man memset" in your shell) void *memset(void
2011-12-09 16:56:28 36507
原创 C++ main函数详解
main函数的参数 我们经常用的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个
2011-12-09 16:55:44 7673
原创 C++ 指针数组,数组指针,以及函数指针,以及堆中的分配规则
对象的堆内存分配,指针数组和数组指针有关内存的说明 ! 一:关于指针和堆的内存分配先来介绍一下指针 :指针一种类型,理论上来说它包含其他变量的地址,因此有的书上也叫它:地址变量。既然指针是一个类型,是类型就有大小,在达内的服务器上或者普通的PC机上,都是4个字节大小,里边只是存储了一个变量的地址而已。不管什么类型的指针,char * ,int * ,int (*) ,str
2011-12-09 16:54:33 2670
原创 C++ 联合/共用体(union)
共用体类型数据的特点1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。3.共用体变量的地址和它的各成员的地址都是同一地址。4.不能对共用体变量名赋值,也不能
2011-12-09 16:53:09 1453
原创 C++ 模板
1.类模板与模板类的概念⑴什么是类模板 一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。 如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。
2011-12-09 16:52:16 932
原创 C++ 虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的
2011-12-09 16:50:16 546
原创 C++ 指针
函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。定义一个指向函数的指针用如下的形式,以上面的test()为例:int (*fp)(int a);//这里就定义了一个指向函数的指针函数指针不能绝对不能指向不同类型,或者是带
2011-12-09 16:42:14 595
原创 C++ static用法
static用法声明静态局部变量希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的储存单元不释放,在下一次该函数调用时,该变量保留上一次函数调用结束时的值.这时就应该指定该局部变量为静态局部变量.声明静态全局变量某些外部变量(全局变量)之限于被本文件引用,而不能被其他文件引用.声明静态数据成员静态数据成员在所有对象之外单独开辟空间静态数据成员不
2011-12-09 16:38:32 640
原创 C++ sizeof用法
sizeof sizeof操作符的作用是返回一个对象或类型名的长度,长度的单位是字节。返回值的类型是标准库命名为size_t的类型,size_t类型定义在cstddef头文件中,该头文件是C标准库的头文件stddef.h的C++版本。他是一个和机器相关的unsigned类型,其大小足以保证内存中对象的大小。 1、什么是sizeof 首先看一下sizeof在msdn
2011-12-09 16:36:05 1086
原创 Android 多点手势识别
google提供的API中,有个类,大家都很熟悉,GestureDetector。使用它,我们可以识别用户通常会用的手势。但是,这个类不支持多点触摸(可能google认为没有人会在几个手指都在屏幕上的时候,使用手势吧~),不过,最近和朋友们一起做的一个App,的确用到了多点手势(主要是onScroll和onFling两个手势),所以,我就把这个类拓展了一下,来实现让多个控件各自跟着一跟手指实现拖动
2011-12-09 16:25:59 3696
原创 root 运行 Google Chrome
意思是Chrome不允许在root下运行首先需要安装十六进制编辑器# apt-get -y install hexedit然后使用编辑器编辑Chrome# hexedit /opt/google/chrome/chrome注意:路径如果不同的话请自行使用dpkg -c 安装包来察看安装到哪里了。进入到编辑器后,光标在左侧,首先按TAB键切换到右侧的ASCII码模
2011-12-09 14:13:12 1992
原创 Android Service 自动启动
我们在使用某些Android应用的时候,可能会发现安装了某应用以后,会有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。有的服务做的更绝,当用户停止该服务器以后,过了一段时间,服务又自动运行了。虽然,从用户的角度来说,这种方式比较流氓。但是,从程序员的角度来说,这是如何做到的呢?经过研究,我发现有一种方式是可以实现的。下面就和大家分享。先简单介绍,一会儿会贴上全部代码。如何
2011-12-09 14:00:11 6673
原创 Thread-Specific Storage 模式
无论如何,要编写一个多执行绪安全(thread-safe)的程式总是困难的,为了使用的共用资源,您必须小心的对共用资源进行同步,同步带来一定的效能延迟,而另一方面,在处理同步的时候,又要注意物件的锁定与释放,避免产生死结,种种因素都使得编写多执行绪程式变得困难。Thread-Specific Storage模式尝试从另一个角度来解释多执行绪共用资源的问题,其思考点很简单,即然共用资源这么困
2011-11-25 15:42:28 1337
原创 Two-phase Termination 模式
Two-phaseTermination直译的话是“两相终止”,不过就这个模式而言,该译作“两阶段终止”比较适当,想像您有一个执行绪正在周期性的运作,在“运作阶段”您送出了停止执行绪的请求,这时候执行绪不该慌张的马上终止目前的工作,而是先完成这一次周期的工作,然后进入“善后阶段”完成一些善后的工作,例如关闭档案或网路串流,所谓的两阶段终止,即中止“运作阶段”,并完成“善后阶段”,完整的完成执行绪的
2011-11-25 15:40:09 818
原创 Read-Write-Lock 模式
如果有一个资料档有可能同时间会有许多客户端对它进行读取与写入的动作,则必须注意资料的同步问题,像是两个写入者进行写入时,后一个写入者的资料会有可能将次一个写入者的资料覆盖掉;而有时您希望读取者看到的是最新的资料,如果在读取的时候,有写入者想要对资料进行写入,则最好等待读取者读取完毕,相反的如果在写入时有客户想要读取资料,则最好等待,以确保读出来的资料是最新的资料。读取写入的同步问题向来是难
2011-11-25 15:00:31 1025
原创 Future 模式
Future模式可以简单的看成是 Proxy 模式 与 Thread-Per-Message 模式的结合,在Proxy模式中,用一个Proxy来代替真正的目标(Subject)生成,目标的生成可能是费时的,例如在开启一个内嵌图片的文件中,希望程式能尽快完成开启文件的动作,并显示一个可接受的画面给使用者看,在还不需要看到图片的页面中先使用Proxy代替真正的图片载入,只有在真正需要看到图片时,才由P
2011-11-25 14:56:39 858
原创 Thread-Per-Message 模式
Thread-Per-Message模式是一个很简单但很常应用的模式,尤其是在GUI程式中,我们举个例子,当您设计一个文件编辑器时,您可能像这样注册一个开启档案的事件处理: menuOpenFile.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e)
2011-11-25 14:53:54 1027
原创 Worker Thread 模式
Worker Thread模式在Request的管理上像是 Producer Consumer 模式,在Request的行为上像是 Command 模式。Producer Consumer模式专注于Product的生产与消费,至于Product被消费时是作何处理,则不在它的讨论范围之中。 如果您的Product是一个Request,消费者取得Request之后,执行Requ
2011-11-25 14:52:51 1186
原创 Producer Consumer 模式
Producer Consumer模式与 Guarded Suspension 模式是类似的,只不过Guarded Suspension模式并不限制缓冲区的长度,ProducerConsumer模式假设所生产的产品放置在一个长度有限制的缓冲区(就像是一个产品桌,它可以摆放的空间是有限的),如果缓冲区满了,则生产者必须停止继续将产品放到缓冲区中,直到消费者取走了产品而有了空间,而如果缓冲区中没有产品
2011-11-25 14:48:09 1052
原创 Guarded Suspension 模式
考虑这么一个伺服器,它可以处理来自多个客户端的服务请求(Request),为了不丢失客户的请求,它要维持一个缓冲区,客户的请求会先储存至缓冲区中,而伺服器会从缓冲区中取出请求并执行,如果缓冲区中没有请求,则伺服器就等待,直到被通知有新的请求存入缓冲区中,伺服器再度进行请求的执行。关于这个描述的一个简单 UML 顺序图如下所示: 首先要考虑到,缓冲区会同时被两个以上的执行绪进
2011-11-25 14:45:07 2166 1
原创 Visitor 模式
在Java中所有的物件都继承自Object物件,这样作的优点之一,就是使得一些集合物件的资料结构容易管理,例如您可以将任何型态的物件放入Vector中。然而现在有个问题是,如果您的集合(connection)物件中不仅储存一种型态的物件,如果想要对这些物件作出一些个别化的操作,首要条件就是要知道该物件的型态,使用 instanceof 似乎是个不错的方式,在程式简单的情况下,也许您会这么作
2011-11-25 14:42:34 729
原创 Template Method 模式
不要将设计模式想得高不可攀,好像高手才会使用的东西,事实上如果您在下手程式之前,能稍稍对程式作个分析规划,或多或少都会用到一些模式了,模式不是教条,它只是前人的经验成果,而 Gof 的书则是择前人之精华持续改进而来罢了。Template Method模式就是一个很简单的模式,但可能是使用最广泛的模式,也许您也一直在使用这样的模式,看它的 UML 类别结构图就知道了:仅仅是抽
2011-11-25 14:37:03 643
原创 Strategy 模式
考虑您要设计一个更换各种符号的工具类TextCharChange,您是否会采用这样的方式:public void replace() { switch(getChangeType()) { case RN_TYPE: replaceRN(); break; case N_TYPE: re
2011-11-25 14:34:25 536
原创 State 模式
如果您不了解TCP的连线方式,在看 Gof的书介绍State模式时,大概会看得一头雾水吧!TCP的连线状态图,光是要了解就要花点精神了,它的连线状态很多,用来说明状态模式确实很适合,但不适合教导初学模式的人。由简单的开始会比较好理解状态模式的作用,先来看一个例子,如果您有一个只能顺时针转动的瓦斯开关,转动一次的状态为off、small fire、medium fire与largefir
2011-11-25 14:30:45 619
原创 Observer 模式
假设今天您设计一个试算表程式,当中有一个资料物件,您可以用表格图形物件、柱状图形物件、圆饼图形物件等方式来呈现物件,无论您是用哪种图形物件,重点是若资料物件的内容作了更改,则图形物件的内容也必须跟着修改,或许您的程式中有两个以上的图形物件来呈现资料,您在图形物件上更动资料,则另一个图形物件也必须作出相对应的变化。主题 资料物件 观察者 柱状图形 表格图形
2011-11-25 14:26:26 735
原创 Memento 模式
您希望您的程式中具有复原机制,如果您直接在物件中建立复原机制,这会使得物件本身的职责加重,并且使得物件的重用性降低。与其在物件内建立复原机制,不如将复原机制从物件中脱离出来,这个时候您可以使用Memento模式来达成这个功能。Memento模式在Originator中保留一个Memento成员,这个Memento可以包括Originator的成员资讯,在外部的话,Memento可以
2011-11-25 14:23:34 635
原创 Mediator 模式
Mediator的意思是中介者、调节者、传递物,顾名思义,这个模式在程式中必然负担一个中介、调节、传递的工作。物件导向设计中,每个物件所负担的工作尽可能的简单明了,鼓励物件将工作分布至其它物件上,让一群工作属性相同的物件得以共同合作,即所谓高聚合性,以增加物件的可重用性。然而在组织物件工作的同时,物件彼此之间可能知道彼此的存在,并相互依赖,这就使得物件之间的耦合性相对的提高,最差的
2011-11-25 14:20:58 792
原创 Iterator 模式
在Java中提供有ArrayList类,您可以用它来设计一个动态的物件阵列,并在适当的时候取出阵列中的物件,假设今天您要循序的访问ArrayList中的所有物件,则您可能采取这样的方式: Main.java import java.util.*;public class Main { public static void main(String[] args
2011-11-25 14:16:32 439
原创 Interpreter 模式
对于一个具有层次节点关系的问题来说,如果您要剖析每一个节点,您可以使用Interpreter模式,直译器模式有些类似演算法中的个别击破方式,对每一个父节点我们剖析出其子节点组合,然而交给子节点剖析物件继续剖析,直到剖析至终端节点为止。假设您要实作一个Interpreter,这个Interpreter可以直译您文字档中的程式,并依您自订的程式文法来执行程式,几个简单的程式如下:PROGR
2011-11-25 14:13:24 622
原创 Command 模式
如果您写过Java的Swing视窗程式,您可能使用过Command模式了,例如在您按下JMenuItem的“剪下”选项时,执行对JTextArea的选定文字之剪下动作,并将状态列设定为文件已修改状态。在设计Swing时,设计人员是不可能知道使用Swing类别的人,在某个事件发生后所要执行的动作是什么的,他们采用了Command模式,以上面的需求作为例子,一个实作的片段可能像是这个样子:
2011-11-25 14:07:35 462
原创 Chain of Responsibility 模式
其实Chain of Responsibility的概念,即使是一个刚学程式设计的新手也会用到,一个简单的 if...else if ... else 流程控制就有Chain of Responsibility的概念:if(/* 符合请求条件一 */) // 执行请求一else if(/* 符合请求条件二 */) // 执行请求二else // 执行
2011-11-25 14:01:18 503
原创 Proxy 模式(二)
延续 Proxy模式(一) 的议题,来看看实现代理的两种方式:Static Proxy与Dynamic Proxy。严格来说这是属于模式的实现方式,不过藉由实例可以更了解Proxy模式的应用。先来看个例子,这个例子是记录(log)动作,程式中很常需要为某些动作或事件作下记录,以便在事后检视或是作为除错时的资讯,一个最简单的例子如下: HelloSpeaker.java
2011-11-25 13:58:05 478
OpenGL编程指南(第七版)
2012-01-04
testmusic.pcm AudioTrack使用测试文件
2011-10-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人