自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (13)
  • 收藏
  • 关注

原创 第11 章 其它编程经验

<br /><br />11.1 使用const 提高函数的健壮性<br />     看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的<br />魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。<br />11.1.1 用const 修饰函数的参数<br />     如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修

2010-11-18 10:45:00 801

原创 第10 章 类的继承与组合

<br /><br />10.1 继承<br />     C++的“继承”特性可以提高程序的可复用性。正因为“继承”太有用、太容易用,才要防止乱用“继承”。我们应当给“继承”立一些使用规则。<br /> <br />【规则10-1-1】如果类A 和类B 毫不相关,不可以为了使B 的功能更多些而让B继承A 的功能和属性。不要觉得“白吃白不吃”,让一个好端端的健壮青年无缘无<br />故地吃人参补身体。<br />【规则10-1-2】若在逻辑上B 是A 的“一种”(a kind of ),则允许B 继承A 的

2010-11-18 10:43:00 606

原创 第9 章 类的构造函数、析构函数与赋值函数

<br /><br />9.2 构造函数的初始化表<br />构造函数初始化表的使用规则:<br />

2010-11-18 10:41:00 589

原创 第八章 C++函数的高级特性(8.3 参数的缺省值 8.4 运算符重载 8.5 函数内联)

<br /><br />8.3 参数的缺省值<br />参数缺省值的使用规则:<br />【规则8-3-1】参数缺省值只能出现在函数的声明中,而不能出现在定义体中。<br />例如:<br />void Foo(int x=0, int y=0); // 正确,缺省值出现在函数的声明中<br />void Foo(int x=0, int y=0) // 错误,缺省值出现在函数的定义体中<br />{<br />⋯<br />}<br /> <br />【规则8-3-2】如果函数有多个参数,参数只能从后向前

2010-11-18 10:37:00 871

原创 第八章 C++函数的高级特性(8.2 成员函数的重载、覆盖与隐藏)

8.2 成员函数的重载、覆盖与隐藏成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。#include class Base{public:void f(int x){ cout void f(float x){ cout virtual void g(void){ co

2010-11-18 10:31:00 733

原创 第八章 C++函数的高级特性(8.1 函数重载的概念)

8.1 函数重载的概念1.如果C++程序要调用已经被编译后的C 函数,该怎么办?void foo(int x, int y);该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。例如:extern “C”{void foo(int x, int y);⋯ // 其它函数}或者写成extern “C”{

2010-11-18 10:10:00 663

原创 高质量C++编程之(7.10 malloc/free 的使用要点 7.11 new/delete 的使用要点)

<br /><br />7.10 malloc/free 的使用要点<br />函数malloc 的原型如下:<br />void * malloc(size_t size);<br />用malloc 申请一块长度为length 的整数类型的内存,程序如下:<br />int *p = (int *) malloc(sizeof(int) * length);<br />我们应当把注意力集中在两个要素上:“类型转换”和“sizeof”。<br />

2010-11-18 10:05:00 593

原创 高质量C++编程之(7.8 有了malloc/free 为什么还要new/delete ?7.9 内存耗尽怎么办?)

<br /><br />7.8 有了malloc/free 为什么还要new/delete ?<br />      malloc 与free 是C++/C 语言的标准库函数,new/delete 是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象在消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任

2010-11-18 09:58:00 699

原创 高质量C++编程之(7.7 杜绝“野指针”)

<br /><br />7.7 杜绝“野指针”<br />“野指针”不是NULL 指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if 语句很容易判断。但是“野指针”是很危险的,if 语句对它不起作用。<br />“野指针”的成因主要有两种:<br />(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL 指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么<br />将指针设置为NULL,要么让它指向合法的内存。<br />例如<br

2010-11-18 09:54:00 701

原创 高质量C++编程之(7.5 free 和delete 把指针怎么啦? 7.6动态内存会被自动释放吗?)

<br /><br />7.5 free 和delete 把指针怎么啦?<br />     别看free 和delete 的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。用调试器跟踪示例7-5,发现指针p 被free 以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p 成了“野指针”。如果此时不把p 设置为NULL,会让人误以为p 是个合法的指针。如果程序比较长,我们有时记不住p 所指的内存是否已经被释放,在继续使用p 之前,通常会用语句if

2010-11-18 09:51:00 1068

原创 高质量C++编程之(7.4指针参数是如何传递内存的?)

<br /><br />7.4 指针参数是如何传递内存的?<br />   如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1 中,Test 函数的语句GetMemory(str, 200)并没有使str 获得期望的内存,str 依旧是NULL,<br />为什么?<br />void GetMemory(char *p, int num)<br />{<br />p = (char *)malloc(sizeof(char) * num);<br />}<br />void Test

2010-11-18 09:47:00 608

原创 第七章 内存管理(常见内存错误,指针数组的比较)

<br /><br />7.2 常见的内存错误及其对策<br />    问题1: 内存分配未成功,却使用了它<br />    解决办法:在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p==NULL)或if(p!=NULL)进行防错处理。<br />    问题2: 内存分配虽然成功,但是尚未初始化就引用它。<br />    问题3: 内存分配成功并且已经初始化,但操作越过了内

2010-11-18 09:44:00 635

原创 第十一章 处理概括关系

第十一章 处理概括关系 Dealing with Generalization11.1  Pull Up Field(值域上移)症状:两个subclasses拥有相同的值域解决办法:将此一值移至superclass.11.2  Pull Up Method(函数上移)症状:有些函数,在各个subclass中产生完全相同的结果。解决办法:将该函数移至superclass.11.3  Pull Up Constructor Body(构造函数体上移)症状:你在各个子类中拥有一些构造函数,它们的本体(代码)几乎完

2010-11-16 19:53:00 744

原创 第十章 简化函数调用

<br /> <br />第十章 简化函数调用 Making Method Calls Simpler<br /> <br />10.1   Rename Method(重命名函数)<br />症状:函数的名称未能揭示函数的用途。<br />解决办法:修改函数名称<br /> <br /> <br />10.2   Add Parameter(添加参数)<br />症状:某个函数需要从调用端得到更多信息<br />解决办法:为此函数添加一个对象参数,让该对象带进函数所需信息<br /> <br /> <br

2010-11-16 19:50:00 578

原创 第九章 简化条件表达式

<br /><br />第九章 简化条件表达式 Simplifying Conditional Expressions<br /> <br />9.1   Decompose Conditional(分解条件式)<br />症状:你有一个复杂的条件(if-then-else)语句<br />解决办法:从if-then-else三个段落中分别提炼出独立函数。<br /> <br />9.2   Consolidate Conditional Expression(合并条件式)<br />症状:你有一系列条件测

2010-11-16 19:46:00 730

原创 第八章 重新组织数据(Organizing Data)

第八章 重新组织数据(Organizing Data)8.1   Self Encapsulate Field(自封装值域)  就是set get函数症状:你直接访问一个值域(field),但与值域直接按的耦合关系逐渐变得笨拙。解决办法:为这个值域建立取值/设值函数(getting/setting methods),并且只以这些函数来访问值域。8.2   Replace Data Value with Object(以对象取代数据值)症状:你有一笔数据项(data item),需要额外的数据和行为。解决办法

2010-11-16 19:41:00 1023

原创 第七章 在对象之间搬移特性

第七章 在对象之间搬移特性(Moving Features Between Objects)7.1  Move Method(搬移函数)症状:你的程序中,有个函数与其所驻class之外的另一个class进行更多交流;调用后者或被后者调用。解决办法:在该函数最常引用的class中建立一个有着类似行为的新函数。将旧函数变成一个单纯的委托函数,或者是将旧函数完全移除。7.2  Move Field(搬移值域)症状:你的程序中,某个field(值域)被其所驻class之外的另一个class更多地用到。解决办法:在t

2010-11-16 19:37:00 646

原创 第六章 重新组织你的函数

6.1 Extract Method(提炼函数)动机:当看见一个过长的函数或者一段需要注释才能让人理解用途的代码,就需要将这段代码放进一个独立函数中一段代码可以被组织在一起并独立出来。    三种情况:(局部变量替换为查询式即可)1)无局部变量2)有局部变量3)对局部变量再赋值6.2 Inline Method(将函数内联化)    一个函数,其本体(method body)应该与其名称(method name)同样清楚易懂。在函数调用点插入函数本体,然后移除该函数。三种主要情况:1)内部代码吧和函数名称同

2010-11-16 19:33:00 780

原创 设计模式之十四 观察者模式(老板回来我不知道)

类似于订阅模式 观察者模式(Observer)(又叫做发布-订阅‘Publish/Subscribe’模式),定义了一种一对多的依赖关系,让多个 观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 Subject类,可翻译为主题或抽象通知者,一般用一个抽象类或者一个借口实现。它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。 Obse

2010-11-07 11:52:00 1167

原创 设计模式之十三 建造者模式(建造小人)

<br /><br />     建造者模式(Builder)(又叫生成器模式),将一个复杂对象的构建和表示分离,使得同样的构建过程可以创建不同的表示。<br /> Builder是为创建一个Product对象的各个部件指定的抽象接口;<br /> ConcreteBuilder是具体的建造者,实现Builder接口,构造和装配各个部件;<br /> Product是具体的产品;<br /> Director是指挥者,用来构建一个使用Builder接口的对象。<br />    建造者模式主要用于创

2010-11-07 10:11:00 1389 1

原创 设计模式之十二 外观模式-股票基金

<br />    外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。<br />     其实就是在客户端和一堆子类中间加了一个简单的接口,从而使得客户端不需要知道一些更加细节的东西。充分体现了依赖倒转原则(高层模块不依赖低层模块,它们都依赖于抽象)和迪米特法则(如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用)。<br />      

2010-11-01 21:05:00 735

原创 第五章 重构名录

<br /><br />重构名录<br />一、重构的记录格式<br />5-12章介绍了各种重构手法,每个重构手法包含如下5部分:<br />1.名称:<br />2.简短概要:简单介绍此重构手法的适用情景<br />3.动机:介绍为什么需要这个重构和什么情况下不该使用这个重构<br />4.作法:简明扼要地一步一步介绍如何进行此重构<br />5.范例:<br /> <br />二、寻找引用点<br />   文本工具进行查找<br />三、这些重构准则有多成熟<br />    重构的基本技巧-小步前

2010-11-01 15:06:00 653

原创 第四章 构筑测试体系

  自我测试代码(Self-testing Code)的价值  如果认真观察程序员把最多时间耗在哪里,你就会发现,编写代码其实只占非常小的一部分。  确保所有测试都完全自动化,让它们检查自己的测试结构。  只要写好一点功能就添加测试。  一整组(a suite of)测试就是一个强大的臭虫侦测器,能够大大所见查找臭虫所需要的时间。   实际上,撰写测试代码的最有用时机是在开始编程之前。当你需要添加特性的时候,先写相应测试代码。编写测试代码就是在问自己,添加这个功能需要做些什么。编写测试代码还能使你把注意力集

2010-11-01 15:04:00 562

QT5开发及实例

QT5开发及实例,完整的源码,可以直接运行,文档是PDF的,蛮清晰

2018-12-10

IEC104规约Server及Client实现

IEC104规约的服务器和客户端实现,遥信遥测遥调遥控都有,学习的实际项目都能用上,VC6.0直接编译运行

2016-07-26

自定义TreeListCtrl

TreeListCtrl,在ListCtrl控件中建立树形结构,能够嵌入组合框和编辑框,并且根据数据类型来检查数据的合法性,可以设置维度来直接插入一个若干维的数据 (0资源分也有好东西,我所有上传的资源都是0资源分,只是想跟大家共享而已)

2013-11-27

调试跟踪工具OllyDbg+1.09中文版

为了做DLL破解下载的这个工具,本来有更新的版本,但是找到的文档里面用的是这个版本别的版本步骤对应不上。花了10个积分,虽然是好东西,也很心疼,贡献出来大家用。

2013-02-27

IEC104规约详细讲解.ppt

花了10个积分下的,真心不划算,贡献出来大家一起学习。

2013-02-27

swiEditor相关资料

SwixEditor_User_Guide是swiEdito的用户手册,UIDesignJavaXML是一些实例操作。本来想上传软件,但是级别不够,只能传小于15M的文件 这个文章有些笔记http://blog.csdn.net/huaerge/article/details/6744528

2011-09-02

注册表监控存储设备插拔

从注册表入手实现对USB和SD卡设备插拔的监控,不依赖于窗口消息WM_DEVCHANGE

2011-05-30

Windows 下注册表项键值监控

windows下注册表项的监控,当指定注册表发生变化时给出提示

2011-05-30

wince下进程保护

包含两个程序,一个是基于MFC的对话框程序实现进程保护,另一个是进程保护的DLL,两个程序均是基于wince平台。

2011-05-30

SkinMagic界面皮肤美化源码

这段代码跟之前上传的皮肤代码效果是一样的,只是支持的皮肤少了一点点,同样是给出了具体的使用方法!

2011-01-06

程序皮肤文件,使用方法及实例

包含界面美化的皮肤文件供99个,详细介绍了使用方法,此外还附有demo程序,每种皮肤笔者都保存了效果图,大大节省了您选择皮肤的时间! 好东西大家分享,不要积分!

2011-01-06

托盘图标的制作,双击托盘图标重新打开窗口,点击托盘图标右键可以选择是打开窗口还是退出程序

源码包含托盘图标的执行文件,和一个实例程序,实现的功能如下: 运行程序,桌面右下方出现托盘图标,关闭程序窗口时窗口关闭,此时双击托盘图标重新打开窗口,点击托盘图标右键可以选择是打开窗口还是退出程序!

2010-05-27

DETOURS.rar

Detours.lib 是微软开发的一个函数库,可用于捕获系统API。我花了高分下的,免费共享出来!

2010-04-15

空空如也

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

TA关注的人

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