2010年12月25日

摘要: http://channel9.msdn.com/Blogs/clinted 阅读全文
posted @ 2010-12-25 06:23 Zhiqiang.Chen 阅读(183) 评论(0) 推荐(0) 编辑

2010年12月23日

摘要: 意图:使多个请求对象都有机会处理请求,从而避免请求对象的发送者和接收者之间的耦合关系。将这些请求对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。职责链模式典型结构图 职责模式中ConcreteHandle将自己的后继对象(向下传递消息的对象)记录在自己的后继表中,当一个请求到来时,ConcreteHandle先会检查自己有没有匹配的处理程序,如果有就自己处理,否则就传递给他的后继。下面的实例程序中只是简化了一下,ConcreteHandle只是简单的检查看自己有没有后继,有的话将请求传递给后继进行处理,没有的话就自己处理。示例代码:class Handler{public:. 阅读全文
posted @ 2010-12-23 17:56 Zhiqiang.Chen 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 下面这张UML示例图是从《大话设计模式》截出来的:对上面的UML图例之间的关系做一下总结:一、关联(association) 两者之间只是一种“知道”的关系,耦合度非常小。例如上图中的企鹅类与气候类。 图形表示:用一根连接类的实线表示,用箭头表示关联的方向;如果不明确指明方向,则默认关联是双向的。 二、 聚合(aggregation) 聚合体现了类之间的一种整体与部分的关系,表示一种很弱的“拥有”关系。体现了一种层次结构,整体类位于部分类的上层,多个部分类处于并列的层次 。 图形表示:尾端带一个菱形的单箭头直线,菱形指向整体部分 。三、 组合(composition) 组合是一种很强的“拥有. 阅读全文
posted @ 2010-12-23 16:11 Zhiqiang.Chen 阅读(164) 评论(0) 推荐(0) 编辑

2010年12月20日

摘要: 相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加malloc/free。(2)在用法上也有所不同。函数malloc 的原型如下:void * malloc(size_t size);用malloc 申请一块长度为lengt 阅读全文
posted @ 2010-12-20 17:54 Zhiqiang.Chen 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Para 其中Para 为参数,下面来看一些常用的参数。 (1)message 参数。 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #Pragma message(“. 阅读全文
posted @ 2010-12-20 17:53 Zhiqiang.Chen 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 一、Debug和Release编译方式的本质区别Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。Debug和Release的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd/Fo,但区别并不重要,通常他们也不会引起Release版错误,在此不讨论)Debug版本:/MDd/MLd或/MTd使用Debugruntimelibrary(调试版本的运行时刻函数库)/Od关闭优化开关/D"_DEBUG& 阅读全文
posted @ 2010-12-20 17:50 Zhiqiang.Chen 阅读(477) 评论(0) 推荐(0) 编辑
摘要: 在VC程序中使用调试语句为了更好地对程序调试,可以使用如下方法:使用断言、使用跟踪语句、使用异常和返回值。一、断言1、基本概念 断言是一种让错误在运行时候自我暴露的简单有效实用的技术。它们帮助你较早较轻易地发现错误,使得整个调试过程效率更高。 断言是布尔调试语句,用来检测在程序正常运行的时候某一个条件的值是否总为真,它能让错误在运行时刻暴露在程序员面前。使用断言的最大好处在于,能在更解决错误的发源地的地方发现错误。断言具有以下特征:.断言是用来发现运行时刻错误的,发现的错误是关于程序实现方面的。.断言中的布尔表达式显示的是某个对象或者状态的有效性而不是正确性。.断言在条件编译后只存在于调试.. 阅读全文
posted @ 2010-12-20 17:44 Zhiqiang.Chen 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 使用VisualC++调试器调试一、调试版本与发布版本 有时程序能在调试版本运行但不能运行于发布版本,反之也有可能。一般说来,一个发布版本意味着某些类型的优化,而一个调试版本则没有优化。下面我们来看看它们的区别:1、特别针对调试版本的编译选项(1)/MDd,/MLd或者/MTd 调试版本的运行时刻库有调试符号,使用了调试堆,调试堆的目的是发现内存破坏和内存泄漏,并且向用户报告源代码的哪个地方出了问题。特性:.调试版本的运行时刻库对内存的分配作了跟踪,允许用户检查内存泄漏。.在刚分配的内存里写上0xCD的字节模式,用0xCD来填充刚分配的内存,有助于发现数据未被初始化的错误。.在被释放的内存.. 阅读全文
posted @ 2010-12-20 17:41 Zhiqiang.Chen 阅读(974) 评论(0) 推荐(0) 编辑
摘要: 理解内核对象,先要了解什么是内核。内核可以理解为一个人的大脑,我们知道大脑能控制一个人的行为,但是大脑并不是直接控制,而是是通过神经来传递命令,内核对象就是操作系统的神经。内核对象实际上就是一些只有内核才能访问的内存数据,内核通过访问这些数据来完成对系统的控制,上层可以看到内核对象,并执行对它的一些操作,但是却无法访问这些数据。进程、线程、作业等都是内核对象,你可以操作它们却不能访问它们。 阅读全文
posted @ 2010-12-20 17:33 Zhiqiang.Chen 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。2.sizeof是算符,strlen是函数。3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''/0''结尾的。4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。5.大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因charstr[20]="0123456789"; // 阅读全文
posted @ 2010-12-20 17:21 Zhiqiang.Chen 阅读(269) 评论(0) 推荐(0) 编辑

导航