编程之美
文章平均质量分 77
SzMing
这个作者很懒,什么都没留下…
展开
-
23种设计模式五:创建型原型模式
定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。类型:创建类模式类图:原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clo转载 2012-11-06 14:40:46 · 409 阅读 · 0 评论 -
VC++中使用XML实列
/****************************************//必要的头文件#import //xmlusing namespace MSXML;//****************************************class CXMLControl{//公有方法public: _bstr_t GetNodeText转载 2012-11-09 16:31:09 · 519 阅读 · 0 评论 -
线程同步技术(一)
使线程同步 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解。例如,多个线程同时访问同一个全局变量,如果都是读取操转载 2012-11-09 16:26:34 · 543 阅读 · 0 评论 -
增加用户自定义消息
ClassWizard不允许增加用户自定义消息,所以你必须手工输入。输入后,ClassWizard就可以象处理其它消息一样处理你自定义的消息了。下面是增加自定义消息的步骤:第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。第二步:实现消息处理函数。该函数使用WPRA转载 2012-11-09 16:19:28 · 488 阅读 · 0 评论 -
一个有用的ANSI字符串类String的实现及使用演示
下面的程序分成两个部分:(1)String类:类头String.h和类实现String.cpp(2)String类使用演示程序Main.cpp 类头文件String.h代码如下: #ifndef STRING_H #define STRING_H #include using namespace std;class String转载 2012-11-09 16:15:15 · 506 阅读 · 0 评论 -
显式加载DLL并使用 DLL 中的类
首先需要强调,当使用某个类时一般目的有二:实例化成对象或者继承它产生新类。对于前者,我们可以构造一个抽象类(java里的接口)来连接调用方和DLL。 抽象类:// Interface.h 公共文件/////////////////////////////////////////////////#pragma once class Interf转载 2012-11-09 16:29:49 · 514 阅读 · 0 评论 -
线程同步技术(二)
互斥内核对象 互斥(Mutex)是一种用途非常广泛的内核对象。能够保证多个线程对同一共享资源的互斥访问。同临界区有些类似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。以便其他线程在获得后得以访问资源。与其他几种内核对象不同,互斥对象在操作系统中拥有特殊代码,并由操作系统来管理,操作系统甚至还允许其进行一些其转载 2012-11-09 16:28:09 · 466 阅读 · 0 评论 -
进程与进程间通信
摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。Microsoft Win32 API提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望能给读者选择通信方法提供参考。关键词 进程 进程通信 IPC Win32 API1 进程转载 2012-11-09 16:18:43 · 760 阅读 · 0 评论 -
用Visual C++制作微秒级精度定时器
在工业生产控制系统中,有许多需要定时完成的操作,如:定时显示当前时间,定时刷新屏幕上的进度条,上位机定时向下位机发送命令和传送数据等。特别是在对控制性能要求较高的控制系统和数据采集系统中,就更需要精确定时操作。众所周知,Windows是基于消息机制的系统,任何事件的执行都是通过发送和接收消息来完成的。这样就带来了一些问题,如一旦计算机的CPU被某个进程占用,或系统资源紧张时,发送到消息队列中的消息转载 2012-11-09 16:18:02 · 676 阅读 · 0 评论 -
设计模式六大原则(3):依赖倒置原则
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接转载 2012-11-05 16:34:57 · 407 阅读 · 0 评论 -
电影院售票系统
大学期间的C++课设,难忘的时刻仍留于脑海。总结:总体设计满意,功能齐全,但缺点是主函数过于“庞大”,应该用函数实现,其实留有遗憾才能进步!呵呵。。。 主要程序代码,加上详细的注释//头文件:#includeusing namespace std;#include#include#include //时间函数,转载 2012-10-28 22:31:42 · 3599 阅读 · 2 评论 -
简单计算器(应用软件)
由于刚接触MFC类库,所以做了个简单计算器软件。计算器名:“老高”计算器用途:简单计算制作者:老高简介:一、 设计思路1.由于第一做此类作品以及时间紧迫,模仿了微软的计算器,但只实现了小部分功能。为了以图形界面方式实现,使用了VC++6.0编译器的MFC类库,以及凝霜界面库(第三方界面库,采用DDE机制,界面元素完全自绘),主要语言是C++。原创 2012-10-28 22:30:36 · 1511 阅读 · 0 评论 -
DLL动态链接库和LIB静态链接库之程序员经验分析
前言:依旧,吐槽,哈哈哈~~~~其实依旧是为公司程序员扫盲,呼,挺想睡觉的其实。言归正传吧。1:神马是Dll和Lib,神马是静态链接和动态链接大家都懂的,DLL就是动态链接库,LIB是静态链接库。DLL其实就是EXE,只不过没main。动态链接是相对于静态链接而言的。所谓静态链接就是把函数或过程直接链接到可执行文件中,成为可执行程序中的一部分,当多个程序调用同样的函数时,内存里就会有这转载 2012-11-12 21:49:49 · 458 阅读 · 0 评论 -
CRC原理及其逆向破解方法
介绍: 这篇短文包含CRC原理介绍和其逆向分析方法,很多程序员和破解者不是很清楚了解CRC的工作原理,而且几乎没人知道如何逆向分析它的方法,事实上它是非常有用的.首先,这篇教程教你一般如何计算CRC,你可以将它用在数据代码保护中.第二,主要是介绍如何逆向分析CRC-32,你可以以此来分析程序中的CRC保护(象反病毒编码).当然有很多有效的工具用来对付CRC,但我怀疑它是否会说明原理原创 2012-11-12 21:40:11 · 2234 阅读 · 0 评论 -
c++中RTTI的观念和使用
下面这篇文章虽然有点老,但对C++的RTTI基本原理讲的比较透彻。该文章摘自UMLCHINA网站,是台湾一个群体写的,我根据大家比较熟悉的方式,修改了一些名词的说法,如衍生(派生)等,让大家可以方便的阅读。C++的 RTTI 观念和用途物泽C++应用小组 自从1993年Bjarne Stroustrup 〔注1 〕提出有关C++ 的RTTI功能之建议﹐以及C++的异常处理(e转载 2012-11-12 21:44:13 · 500 阅读 · 0 评论 -
关于程序的健壮性及鲁棒性
鲁棒是英文Robust的音译。健壮性是指软件对于规范要求以外的输入情况的处理能力。所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。另外健壮性有时也和容错性,可移植性,正确性有交叉的地方。比如,一个软件可以从错误的输入推断出正确合理的输入,这属于容错性量度标准,但是也可以认为这个软件是健壮的。一个软件可以正确地运原创 2012-12-08 12:17:44 · 2724 阅读 · 0 评论 -
进程管理
概念:程序并不能单独运行,作为资源分配和独立运行的基本单位都是进程。1、 程序并发执行的特征:间断性,失去封闭性,不可再现性2、 进程的三种基本状态就绪状态,执行状态,阻塞状态不少系统中只有上述三种状态,不少系统又引入了第三种状态 挂起状态3、 引起挂起状态的原因终端用户请求,父进程请求,负荷调节的需要,操作系统的需要4、 进原创 2012-11-20 11:36:19 · 588 阅读 · 0 评论 -
高效编程的几招
引言: 编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。第1招:以空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招——以空间换时间。例如:字符串的赋值。方法A,通常的办法:#define LEN 32char原创 2012-11-13 12:34:25 · 435 阅读 · 0 评论 -
内存池实现
话说一直想找一个别人写好的使用,可惜没什么人会拿这小东西发布,只好自写一个。1.多级链表分配池我不知道这种设计的具体学名是什么,这部分的内容也许你去看《STL源码分析》的有关章节更合适一些,这里我只能用我粗陋的语言描述一下。内存池,完全可以从字面上理解为从池子里申请内存,释放的时候还给池子。最简单的内存池应该是fix_pool吧,即每次分配出来的内存块大小是固定的。这种池子的管原创 2012-11-13 12:32:00 · 529 阅读 · 0 评论 -
编写跨平台的软件入门
一, 为什么要跨平台? 你想过把你的 Windows 上编写的程序在 Linux 编译运行吗,以及在 Mac 或其他 OS 上运行等等?反过来也一样?这就需要涉及到跨平台编程知识。这里需要注意的是,平时很多在一个平台运行的程序在跨平台的时候变的不再正确。Java 并非真的是跨平台的开发环境,它是运行在它自己的平台上。这里主要关注 C 和 C++ 的跨平台开发。原创 2012-11-13 12:39:02 · 647 阅读 · 0 评论 -
在operator=中对所有数据成员赋值
条款45说明了如果没写赋值运算符的话,编译器就会为你生成一个,条款11则说明了为什么你会经常不喜欢编译器为你生成的这个赋值运算符,所以你会想能否有个两全其美的办法,让编译器生成一个缺省的赋值运算符,然后可以有选择地重写不喜欢的部分。这是不可能的!只要想对赋值过程的某一个部分进行控制,就必须负责做赋值过程中所有的事。实际编程中,这意味着写赋值运算符时,必须对对象的每一个数据成员赋值:转载 2012-11-13 12:24:12 · 450 阅读 · 0 评论 -
代码优化,怎么样写好代码
程序员当然要说代码了,代码是程序员的一切,离了代码说其他都是假的,我这里从一段代码开始。 int c=0, n=0,nDiff=0; int height = m_imgHeight;//image height LPBYTE lpDsp = pSampling; jp2_int16 *sp, val; LPBYTE dest;原创 2012-11-13 12:37:51 · 654 阅读 · 0 评论 -
内存泄漏测试小工具
LeakDiag是一个监测内存泄漏的工具,可以用来精确地找到内存泄露一直到代码行。它使用微软的Detours 技术,拦截指定内存分配的调用并跟踪各种调用栈,并报告已分配但尚未释放的内存,这一信息允许让我们在排除一个内存泄露问题时,能精确查看哪些组件进行了该分配。使用正确的调试符号,我们甚至可以看见请求分配的代码行。关于detours: http://research.microsoft.com转载 2012-11-12 22:02:59 · 594 阅读 · 0 评论 -
关于Debug和Release之本质区别
本文主要包含如下内容:1. Debug 和 Release 编译方式的本质区别2. 哪些情况下 Release 版会出错3. 怎样“调试” Release 版的程序-------------------------------------- 关于Debug和Release之本质区别的讨论 一、Debug 和 Release 编译方式的本质区别转载 2012-11-12 21:57:42 · 634 阅读 · 0 评论 -
内存管理文章
欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言:640K ought to be enough for everybody — Bill Gates 1981程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。7.1内存分配方式转载 2012-11-12 21:54:26 · 552 阅读 · 0 评论 -
strcpy_s与strcpy安全性的比较(转载)
在VC2005的CRT中,增加了一些具有更强安全性的CRT函数,例如strcpy_s, strncat_s等。(MSDN: Security Enhancements in the CRT > Significant enhancements have been made to make the CRT more secure. Many CRT functions now have mo转载 2012-11-12 21:53:14 · 607 阅读 · 0 评论 -
c++浮点数存储方式
最近一段时间看到版上关于C++里浮点变量精度的讨论比较多,那么我就给对这个问题有疑惑的人详细的讲解一下intel的处理器上是如何处理浮点数的。为了能更方便的讲解,我在这里只以float型为例,从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。还要说的一点是文章和程序一样,兼容性是有一定范围的,原创 2012-11-12 21:52:19 · 559 阅读 · 0 评论 -
设计模式六大原则(2):里氏替换原则
肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的。定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子转载 2012-11-05 16:34:14 · 504 阅读 · 0 评论 -
创建类模式总结篇
创建类模式主要关注对象的创建过程,将对象的创建过程进行封装,使客户端可以直接得到对象,而不用去关心如何创建对象。创建类模式有5种,分别是:单例模式:用于得到内存中的唯一对象。工厂方法模式:用于创建复杂对象。抽象工厂模式:用于创建一组相关或相互依赖的复杂对象。建造者模式:用于创建模块化的更加复杂的对象。原型模式:用于得到一个对象的拷贝。为什么需要创建性模式 首先转载 2012-11-06 14:42:47 · 342 阅读 · 0 评论 -
让控制台程序后台运行并开机启动的简单方法
写完了一个控制台程序,想把让它在后台运行,并开机自启动。有一种简单的方法如下。1.后台运行字一个简单的.vbs文件就可以。实现方法如下:如,我的.exe文件是HKServer.exe。可以用文本文档写如下代码[vb] view plaincopyprint?set wscriptObj = CreateObject("原创 2012-11-04 20:19:11 · 1093 阅读 · 0 评论 -
设计模式- 观察者模式
Gof定义定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通 知并自动更新理解观察者设计模式:当一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。例如你在淘宝上购买了一件商品,当你付完钱后,你的淘宝帐户里会记录等待卖家发货这条信息,你的手机会收到一条短信说你手机银行里扣了钱,你的邮箱也可能会收到一封邮件。转载 2012-11-03 10:08:43 · 413 阅读 · 0 评论 -
程序员有趣的面试智力题
偶然间在网上看到几个原来没见过的面试智力题,有几个题目在国内流传相当广,什么n个人怎么分饼最公平,屋里的三个灯泡分别由哪个开关控制,三架飞机环游世界,用火柴和两根绳子测量45分钟之类的题目,火星得已经可以考古了,这里就不再说了。 1、考虑一个双人游戏。游戏在一个圆桌上进行。每个游戏者都有足够多的硬币。他们需要在桌子上轮流放置硬币,每次必需且只能放置一枚硬币,要求硬币完全置于桌面内(不能转载 2012-10-24 00:43:40 · 1029 阅读 · 0 评论 -
七种方式求斐波那契(Fibonacci)数列通项
一:递归实现 使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1。二:数组实现 空间复杂度和时间复杂度都是0(n),效率一般,比递归来得快。三:vector实现 时间复杂度是0(n),时间复杂度是0(1),就是不知道vector的效率高不高,当然vector有自己的属性会占用资源。四:queue实现 当然转载 2012-10-24 01:08:43 · 1038 阅读 · 0 评论 -
随机数
多样化是生活的一大乐趣,而计算机却似乎完全是可预见的,因此显得较死板,随机数为计算机程序注入了不可预见的东西,因此可以让计算机更好地模拟外部事件。比如游戏,图形显示,计算机仿真,随机数增加了许多的乐趣,而且当计算机程序重复运行时,不会表现出跟它模仿的自然系统有什么不同之处。我们打算设计一个class Random, 它的成员函数生成和返回各种各样的随机数。将要生成随机数的思想是,从翻译 2012-11-01 11:27:17 · 555 阅读 · 0 评论 -
匈牙利命名法
几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这些名字可能会非常古原创 2012-11-01 10:00:49 · 582 阅读 · 0 评论 -
C++ BigInteger (beta version)
#include deque>#include #include #include #include using namespace std;class DividedByZeroException ...{};class BigInteger...{ private: vectorchar> digits;转载 2012-10-31 09:54:08 · 488 阅读 · 0 评论 -
平摊分析 (amortized analysis) -算法导论学习笔记
在平摊分析中,执行一系列数据结构操作所需要的时间是通过执行的所有操作求平均而得出的。平摊分析可以用来证明在一系列操作中,通过对所有操作求平均之后,即使其中单一的操作具有较大的代价,平均代价还是很小的。平摊分析不牵涉到概率,平摊分析保证在最坏情况下,每个操作具有的平均性能。三中最常用的技术:1.聚集分析(aggregate analysis) 证明对所有的n,由n个操作所构成的序列的转载 2012-10-31 09:54:53 · 855 阅读 · 0 评论 -
组件(component)技术介绍
组件(component)技术是各种软件重用方法中最重要的一种方法,也是分布式计算和Web服务的基础。网络应用中的软件组件,又被称为中间件(middleware)。组件技术的应用现在已经十分广泛,从Windows编程中使用的各种控件和公用对话框,到ActiveX控件和DirectX的应用;从微软公司的COM,到Sun公司的JavaBean。其中最流行的组件技术的应用是——客户端的VBX(微软/转载 2012-10-31 09:54:26 · 837 阅读 · 0 评论 -
简单的工厂模式
一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。 1.静态工厂方法统一管理对象的创建。静态工厂方法通过传入的参数判断决定创建哪一个产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。2.静态工厂方法推迟了产品的实例化。通过XML配置文件转载 2012-10-30 11:35:52 · 423 阅读 · 0 评论 -
工厂方法模式
工厂方法模式是对简单工厂模式的改进。首先看看简单工厂模式的缺点。软件是之所以区别于程序,是因为它可以被人们使用,并能间接创造效益。需求是软件开发的核心,忽视用户的需求,软件本身就没有存在的价值。假如Nokia又新开发了一款新手机N99,对于采用简单工厂模式设计的系统,我们的做法是:1.新增一个CN99类继承自CNokia抽象类,这个符合OCP原则。注:OCP:Open-Closed转载 2012-10-30 11:37:25 · 444 阅读 · 0 评论