自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 资源 (3)
  • 收藏
  • 关注

原创 Facade模式(外观模式)

Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。 本文介绍设计模式中的外观(Facade)模式的概念,用法,以及实际应用中怎么样使用Facade模式进行开发。Facade模式的概念Facade模式为一组具有类似功能的

2009-08-30 23:34:00 939

原创 变长数据结构

struct dirent{..............char a[1];}在这里char a[1];长度为1,一般认为作为字符数组只能存放/0,但在这里a[1]声明是放在结构体的最后,属于变长数据结构的使用,能够方便访问结构体后面的地址,如:[Copy to clipboard] [ - ]CODE:  struct dirent{   int len;   char a[0];};

2009-08-28 21:50:00 2119

原创 union 联合体的测试

一直以来很像tcp一样,做可变长的网络数据包,为此自己写了一些很有意思的测试代码,想了解联合体的朋友,不妨从我这里拷过去自己亲自调试调试。#include #include #include struct Msg_t{ char a; int b; int c;};struct Msg_b{ char a; char b; char c; char d;};struct stU{ in

2009-08-28 19:42:00 855

原创 联合的使用

联合用法举例;     struct   table     {         int   pp;         char   tt[20];     };     struct   list     {           char   name;           char   password;     };     struct   All     {             int

2009-08-28 19:24:00 681

原创 ENUM在结构体中占用空间吗(2)

写了上面一篇后,仍然意犹未尽,想测试下函数,虚函数,当然,从书本上我早知道普通函数不占结构体空间,虚函数有个虚函数指针占四个自己的空间。但是我都是从书本上看到的,一直以来没有真正去测试过。 #include #include #include struct Msg{ enum { TAG_SIZE = 3}; enum { TAG_ID = 5, TAG_ID_1, TAG_ID_2, T

2009-08-28 16:21:00 1649

原创 ENUM在结构体中占用空间吗

     今天在调试网络问题时,突然想到了动态数据包,要用到enum来区分不同的数据包。此时想到一个问题"ENUM在结构体中占用空间吗" 于是我写了段代码测试了一下struct Msg{ enum { TAG_SIZE = 3}; enum { TAG_ID = 5, TAG_ID_1, TAG_ID_2, TAG_ID_3}; int a; int b;};void main(){ 

2009-08-28 16:03:00 5006 6

原创 一个非常有用的调试技巧

其意尽在代码之中 #include void main(){ int a = 6;   int b = 0; try  {  a = a/b; } catch(...) {  _asm   {   int 3  } } }

2009-08-24 19:16:00 767

原创 明智地使用私有继承

明智地使用私有继承条款35说明,C++将公有继承视为 "是一个" 的关系。它是通过这个例子来证实的:假如某个类层次结构中,Student类从Person类公有继承,为了使某个函数成功调用,编译器可以在必要时隐式地将Student转换为Person。这个例子很值得再看一遍,只是现在,公有继承换成了私有继承:class Person { ... };class Student:    

2009-08-24 18:45:00 566

原创 初始化类对象

C++中如何初始化类中的表数据?在C语言中,我能像下面这样初始化结构数组: //struct MYSTRUCT { int x,y,z;};MYSTRUCT table[] = { { 1,2,3 }, { 4,5,6 }, ... // etc};//但是如果MYSTRUCT是个C++类,

2009-08-24 15:20:00 566

原创 CSocket 是如何被封装的

CAsyncSocket 看类名就知道,它是一个异步非阻塞Socket封装类,CAsyncSocket::Create()有一个参数指明了你想要处理哪些Socket事件,你关心的事件被指定以后,这个Socket默认就被用作了异步方式。那么CAsyncSocket内部到底是如何将事件交给你的呢? CAsyncSocket的Create()函数,除了创建了一个SOCKET以外,还创建了个CSocket

2009-08-21 02:36:00 945

原创 解决两个类互为成员的问题

 class CB;    class CA    {      CB * m_pB;    };    class CB    {      CA m_pA;    }    关键有两点:    1)其中的一个类需要提前声明(forward declaration);     被提前声明的类在其被具体定义之前只能声明该类的指针或引用,如上面class A定义中只能声明class B的指针(或引

2009-08-20 22:22:00 1562

原创 用更快捷和更高效的方式创建类

例如我们有一个MyServer的工程,在ClassView中可以看到MyServer classes鼠标右键单击此处,弹出New Class对话框,在Name处添上类名,选择Class typeMFC Class表示从MFC类库派生,可以在Base class中选择父类。Form Class表示从CDialog派生的类,可以在Dialog ID中选择对话框资源IDGeneric Class表示从其

2009-08-20 22:18:00 526

原创 虚基类的构造

 如果一个类有多个基类,基类的构造函数在继承类的构造函数之前被调用。基类的构造函数以被声明的顺序被调用。下面是一个例子:  class Y {...}   class X : public Y {...}   X one;   构造函数的调用顺序是下面的顺序:  Y(); // 基类的构造函数  X(); // 继承类的构造函数  对于多基类的情况,下面是一个例子:  class X : publ

2009-08-20 22:12:00 789

原创 通过指针调用函数?

当你通过一个指针调用函数时,不要以为它是个指针就害怕,你就把它当成是一个不折不扣的函数名即可。例如:#include char buff[10];void (*pf) (char *, const char *);pf = strcpy; // 取strcpy的地址pf(buff, "hi"); // 象使用函数名本身一样使用指针 pf

2009-08-20 22:08:00 730

原创 全局对象在“程序开始时”建立一次,在“程序终止时”销毁一次

#include struct Foo{    Foo()  { printf("before main()/n"); }    ~Foo() { printf("after main()/n"); }};Foo smallFoo;int main(int argc, char* argv[]){    std::cout     return 0;}

2009-08-20 22:07:00 666

原创 标准库函数计算时间

   依赖标准库函数,代码不存在操作系统的兼容性问题,以及类似Feb29 或 Y2K 的Bugs    如果想要比较两个日期,可使用difftime():  #include time_t now = time(0); // 获得当前时间time_t yestderday = now-(24*60*60);double diff_in_sec = difftime(now, yesterday);

2009-08-20 21:49:00 534

原创 如何获取随机数

   //先调用它    srand( (unsigned)time( NULL ) );    //随机数计时开始    然后调用    GetRand(float MIN, float MAX)    {        float max;        max=RAND_MAX;        return (int)(rand()*(MAX-MIN)/max+MIN);    }    其

2009-08-20 21:47:00 673

原创 如何得到当前时间日期

一、使用MFC可以用以下代码得到CTime time = CTime::GetCurrentTime();   ///构造CTime对象int m_nYear = time.GetYear();      ///年int m_nMonth = time.GetMonth();      ///月int m_nDay = time.GetDay();      ///日int m_nHour = t

2009-08-20 21:36:00 644

原创 C++编码中减少内存缺陷的方法和工具

C++语言是桌面系统,尤其是系统软件、大型应用软件的主流开发语言。C++语言以其灵活性著称,同时也更复杂。利用C++编写健壮的代码,更具有挑战性。C++允许动态内存管理, 同时也容易导致更多和内存相关的问题。一般而言, 除了系统设计上的缺陷, 基于C++的软件的缺陷和错误大部分都和内存缺陷(主要包括内存访问错误和内存泄漏两类)相关。 所以,消除代码中的内存相关缺陷,成为程序员编写、调试、维护代码中

2009-08-20 21:32:00 1023

原创 数据代码地址分布

   大家可以运行这段代码,我相信足以让你明白 #include #include const int i = 10;  //文本常量区 int  j = 10;  //初始化全局区 int n;  // 未初始化全局区 char *p = "test"; // "test"在文本常量区,指针自身在初始化全局区 int main() {  char *p1 = "H

2009-08-20 17:08:00 649

原创 模态对话框分析(1)

在Windows操作系统中,面向用户的GUI基本上可分为对话框形式和文档/视图两种表现形式。对话框的显示方式又可分为模态对话框和非模态对话框,以适应不同的用户交互需求。由于对话框和文档/视图框架结构各有特色,能不能将文档/视图框架结构当作一对话框来使用,或在对话框中实现文档/视图框架结构内的特色功能呢,答案是肯定的。  下面,从Windows 操作系统消息驱动机制开始,进而探讨模态对话框实现过程的

2009-08-20 14:09:00 643

原创 doc/view/frame之间的关系系列文章(1)

一直以来我没有系统的把23种设计模式一口气看完,总是用到时上网查一查。没来得及去思考,总结这23种设计模式,于是在理解mfc框架时总是不能得心应手,实在是痛苦不堪。今天在研究麻将时,建立一个sdi的工程,于是把这个框架粗略的研究了一番。  大致有下面这些心得:建立SDI向导的过程中,vc6.0为我们做了下面这些事情:1.new了DOC,FRAME,VIEW三个对象2.创建了

2009-08-19 19:11:00 1148

原创 STL容器总结系列(1)

一、容器作为STL的最主要组成部分--容器,分为向量(vector),双端队列(deque),表(list),队列(queue),堆栈(stack),集合(set),多重集合(multiset),映射(map),多重映射(multimap)。以下顺序按照:容器特性所在头文件进行。向量vector可以用常数时间访问和修改任意元素,在序列尾部进行插入和删除时,具有常数时间复杂度,对任意项的

2009-08-19 17:01:00 1395 1

原创 CSocket的listen()函数做了哪些事情

微软把bsd  socket封装的很完美,实现网络编程服务端,仅仅几个步骤首先Create(端口号),接着Listen(允许接入的客户个数)那么Listen这个函数做了哪些事情呢?1. getaddr得到地址信息2. socket建立socket3. bind帮定到socket上4. 创建一个线程,listen开始监听5. 将socket交给主thread去处理

2009-08-19 15:46:00 2017

原创 Loadlibrary 失败的原因

   今天调试公司的游戏程序时,发现Loadlibrary总是调用失败,查看加载的动态库路径完全正确,为什么还是会加载失败呢?莫非是这个被加载的动态库本身有问题,我用工具查看了其依赖性,发现没问题,难道是该动态库依赖的动态库有问题?我继续查看该动态库依赖的动态库依赖性果然是这样。

2009-08-18 14:31:00 2335

原创 ini文件动态配置程序参数

#include #include #include  #define  WOM_WOMCLTMD_INI  "E://work//vctest//testmjong//womcltmd.ini"int main(void){ unsigned int func_rtn; char  StrBuf[256]; char  work[256];  memset(StrBuf, /0, siz

2009-08-16 23:07:00 826

原创 assert 配合#粘连符号调试程序

 #include #include #define  mack(x) #xint main(int argc, char* argv[]){ assert(!mack(abc)); return 0;}

2009-08-16 22:21:00 435

原创 宏的妙用系列(1)

1、概述 C++中出了const关键字以后,宏定义常量的功能已经不在被推荐使用。这使得宏似乎没有了用武之地。实际上,宏还可以做很多事情,笔者也难以全部列举。这里,仅仅列举几个典型的用法,希望大家能够从中获益。 2、实现多环境兼容 常见的情况是,我们实现了一个函数,希望它只在某种编译条件满足是被编译和使用。例如,我希望在源码中插入调试语句,以便以Debug方式运行时能够通过调试信息观察程序运行情

2009-08-16 22:08:00 461

原创 麻将洗牌算法系列(1)

1,首先定义数组paiqiang[136](就是所有的牌)。 2,设置随机种子 3,这样就把136张牌洗乱了 for(i=0;i {  r=rand()%(136-i);  t=paiqiang[136-i-1];  paiqiang[136-i-1]=paiqiang[r];  paiqiang[r]=t; } 正在研究更好的算法,这个算法虽然避免了计算机出现相同随机数的情况,但是很有可

2009-08-16 22:00:00 2964

原创 几个少见的宏以及其作用

__LINE__返回源程序中当前的行号。     __FILE__返回当前源文件名。__DATE__ 返回当前时间。 可以尝试把我这段代码拷贝我去调试看看结果,加深下印象:#include int main(int argc, char* argv[]){ cout cout cout  return 0;}  知道这几个宏的意思,那么下面讲讲其作用,当我们调试程序时想

2009-08-16 21:32:00 508

原创 麻将胡牌算法系列(一)

#include int Hu(int PAI[38]);int Remain(int PAI[38]);int main(){    // °ÑÒ»¸±ÅÆ·ÅÔÚÏÂÃæµÄÊý×éÀ¿ÉÒÔÈÎÒâÌîÈëÊý×ÖÀ´²âÊÔº¯ÊýÕýÈ·Óë·ñ¡£    // ΪÁË·½±ã£¬PAI[0],PAI[10],PAI[20],PAI[30]¶¼ÆúÖ®²»Ó㬲¢ÇÒ

2009-08-16 20:36:00 3828

原创 麻将和牌牌型

和牌的基本牌型       11、123、123、123、123。       11、123、123、123、111(1111,下同)。       11、123、123、111、111。       11、123、111、111、111。       11、111、111、111、111。       和牌的特殊牌型       11、11、11、11、11、11、11(七对)。       1

2009-08-16 16:53:00 2368

原创 如何隐藏状态栏

[ UIApplication sharedApplication ].statusBarHidden = YES;

2009-08-15 13:52:00 843

原创 麻将中的牌类

字牌:东、南、西、北、中、发、白花牌: 梅、兰、竹、菊、春、夏、秋、冬刻字:三张一样顺子:同色三张组成一个序列杠牌:四个一样的牌刻子: 三张相同的牌,万、索、饼和字牌均可凑成将牌:两张相同的牌,万、索、饼和字牌均可凑成,胡牌时必须要有一付“将牌”十三幺:一九饼,一九万,一九条,6张,加东南西北中发白,7张,成听牌,要想胡只要再摸到东南西北中发

2009-08-14 20:49:00 1590

原创 创建modeless对话框

void CTestDlgDlg::OnCreateWindow() { // TODO: Add your control notification handler code here CMyDialog *pDialog = NULL; pDialog = new CMyDialog(); pDialog->Create(IDD_DIALOG, this); if ( NULL !

2009-08-14 19:31:00 550

原创 AFX_MANAGE_STATE(AfxGetStaticModuleState()) 作用

以前写MFC的DLL的时候,总会在自动生成的代码框架里看到提示,需要在每一个输出的函数开始添加上AFX_MANAGE_STATE(AfxGetStaticModuleState())。一直不明白这样做的含义,也一直没有这样做,而且代码也工作得好好的,所以感觉这好像一句废话。最近的项目中,需要在DLL里使用MFC生成界面,这才发现一旦资源放在不同的动态库里,而且还和多线程搅和在一起的时候,事情就变得

2009-08-14 16:19:00 2622

原创 DLL的导出方法(一)

DLL可以使用两种方法将公共符号导入到应用程序中或从 DLL 导出函数:生成 DLL 时使用模块定义 (.DEF) 文件。 在主应用程序的函数定义中使用 __declspec(dllimport) 或 __declspec(dllexport) 关键字。 使用 .DEF 文件模块定义 (.DEF) 文件是包含一个或多个描述各种 DLL 属性的 Module 语句的文本文件。

2009-08-13 19:55:00 1994

原创 C函数: va_start() 和 va_end()

1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...);2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:#include void fun(int a, ...) { int *temp = &a; temp++; for (int i = 0; i { cout temp+

2009-08-11 20:19:00 857

原创 vsprintf 用法

函数名: vsprintf 功  能: 送格式化输出到串中 用  法: int vsprintf(char *string, char *format, va_list param); 程序例: #include #include #include char buffer[80]; int vspf(char *fmt, ...) {    va_list argptr;    int cn

2009-08-11 17:03:00 4652 1

原创 basic_string &assign 的使用

赋值(assign) 语法:   basic_string &assign( const basic_string &str );  basic_string &assign( const char *str );  basic_string &assign( const char *str, size_type num );  basic_string &assign( const basic_

2009-08-11 16:52:00 1715

主板电路分析

文章对一款典型的主板电路进行了透彻的分析

2008-07-25

图书管理系统源码

图书管理系统源码,包括所有图片,代码,数据库,很完整。

2008-02-01

visio 必备宝典

使用VISIO画图时不可缺少得资料,所以叫必备宝典。

2008-01-09

空空如也

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

TA关注的人

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