摘要: 日期的计算虽不是一个难题,却也算是比较繁琐的,经常会在一些公司的笔试题中出现。日期计算的关键是要把特殊情况考虑周全,如闰年。下面就对一些常见的计算日期的相关函数进行讨论。先从简单的函数谈起,然后再考虑复杂点的函数,后面的函数会调用前面的函数。1、判断输入的年份是否是闰年。一年是闰年时,该年的2月会是29天,否则是28天。闰年有两种情况:(1) 该年可以被400整除,如2000年、2400年等。(2)该年可以被4整除,但不能被100整除,如2004年、2008年。从以上两种情况可以得知,2100年、2200年和2300年并不是闰年。计算闰年的代码如下:View Code /*********** 阅读全文
posted @ 2011-07-12 22:51 闲云鹤 阅读(1493) 评论(0) 推荐(0) 编辑
摘要: 昨天在某论坛看到大家在讨论几个面试题,其中一个是把十进制的字符串转换为数字。看到很多人的回复就是几个字“太简单了!”。看完这些人的回复后,我就在想,真的那么简单吗?如果不要求异常处理的话,的确不难;要如果要求异常处理,就很难把异常情况考虑全了。 要想把异常情况都考虑全,只有在单元测试用例上多下功夫了。 下面是把十进制字符串转换为数字的函数代码,添加了异常处理,但却为对异常进行分类。int DecToInt(const char* pcInput){if (NULL == pcInput){throw -1;}int iRet = 0;int iSign = 1;int iIdx = 0;/*. 阅读全文
posted @ 2011-07-10 09:23 闲云鹤 阅读(4261) 评论(0) 推荐(0) 编辑
摘要: Singleton模式要求类只能创建一个实体对象。刚开始学习单件模式之时,在网上搜了一下,发现实现的方式有多种多样,但很多实现方式都存在着一些缺陷,如内存泄露,野指针。尤其是野指针问题不好处理,因为野指针的产生是由调用者产生的。显然,CSingleton类的设计者并不能控制调用者对操作,但却可以限制调用者的调用方式。下面通过几种不同的Singleton模式的实现方式来分析。1、在CSingleton类中建立一个指向CSingleton类的指针的静态变量,在用户第一次调用实体化函数时对该变量进行分配空间。该方法就存在内存泄露的问题。为了阻止调用者对CSingleton类进行实例化,要把CSing 阅读全文
posted @ 2011-07-04 16:08 闲云鹤 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 使用事件和互斥量解决线程同步问题的经典问题——生产者和消费者问题 创建2个线程,生产者线程和消费者线程。 生产者线程负责生产产品,1次生产1个产品,生产的产品放入缓冲区,当缓冲区满了时,生产者暂停生产,等待消费者消费缓冲区中的产品再重新启动。因此,生产者生产产品前,需要等待缓冲区不满的消息。 消费者线程负责消费缓冲区中的产品,1次消费1个产品,当缓冲区为空时,消费者暂停消费,等生产者向缓冲区中放入新的产品后再重新启动。因此,消费者消费产品之前,需要等待缓冲区不为空的消息。 由于生产和消费时都会对缓冲区进行操作,因此,添加互斥量对线程进行互斥保护。 VC6.0下的C++代码如下:#includ. 阅读全文
posted @ 2011-06-28 15:37 闲云鹤 阅读(3138) 评论(0) 推荐(0) 编辑
摘要: 可以通过GetProfileString函数来获得默认的打印机的信息,如果获取默认打印机失败,则可认为当前计算机不存在打印机。C++代码如下:BOOL IsExsitPrinter(){TCHAR tszPrinter[128] = {};DWORD dByteCnt = 0;dByteCnt = GetProfileString(_T("windows"), _T("device"), NULL, tszPrinter, 128);if (dByteCnt <= 0){/*当前计算机不存在打印机*/return FALSE;}/*当前计算机存在打 阅读全文
posted @ 2011-06-12 12:15 闲云鹤 阅读(356) 评论(0) 推荐(0) 编辑
摘要: VC中来获得显示当前运行的所有进程的方法有很多,下面介绍两种方法。1、通过CreateToolhelp32Snapshot来创建所有进程的快照,然后获取所有进程的信息。代码实现如下,可在VC6.0下运行。#include <windows.h>#include <tlhelp32.h>#include <stdio.h>#include <iostream.h>#include <Winbase.h>BOOL PrintProcessList( ){ /*得到所有进程的快照*/HANDLE hProcessSnap = CreateT 阅读全文
posted @ 2011-06-09 22:11 闲云鹤 阅读(4624) 评论(0) 推荐(0) 编辑
摘要: 在VC6.0中,默认情况下,鼠标移动到对话框的控件上时,是不会显示控件的提示信息的。下面将讨论实现显示话框中的控件的提示的步骤。1、在对话框初始化时,开始控件的信息提示。即在OnInitDialog函数中添加以下代码:EnableToolTips(TRUE); 2、在对话框窗口的消息映射中添加对TTN_NEEDTEXT消息的处理。其中,OnToolTipText是响应TTN_NEEDTEXT消息的函数。ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipText)3、声明消息响应函数。afx_msg BOOL OnToolTipText(UINT nID, NMHDR 阅读全文
posted @ 2011-06-07 23:02 闲云鹤 阅读(1520) 评论(1) 推荐(0) 编辑
摘要: 为了区分Factory Method和Abstract Factory的区别,查阅了些资料,总算有点感悟,下面是本人的感悟的总结。在设计模式中,Factory Method和Abstract Factory的区别并不容易理解,主要是Abstrct Factory一般情况下是要通过Factory Method来实现,或者说Abstract Factory包含Factroy Method。从字面上来理解,Factory Method强调的是Method,Abstract Factory强调的是抽象类,也就是继承关系。下面,将使用例子来对比Factory Method和Abstract Factor 阅读全文
posted @ 2011-05-29 22:22 闲云鹤 阅读(1536) 评论(0) 推荐(0) 编辑