中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > MFC或CPP
非议MFC(一)宏和类型定义的困惑
作者:cphj 时间:2001-10-06 09:58 出处:互联网 责编:chinaitpower
              摘要:非议MFC(一)宏和类型定义的困惑

                          非议MFC(一)宏和类型定义的困惑

关键字:C++,MFC,宏,macro,define,typedef

有感于MFC库代码之去简就繁、之故弄玄虚,作下文,聊博一笑。

请看一段常见的代码:

//in user.h
class CTest
{
private:
        int x;
public:
        void SetX(int setX);
        int GetX() const;
        operator int *();
        operator const int *() const;
        void * GetSafeHandle() const;
};

//in user.cpp
#include "user.h"
void CTest::SetX(int setX)
{
        x=setX;
}
//...

我们(MFC的作者)认为这样的代码太浅显,不够深沉,缺少内涵,没有嚼劲。赶快include我们的头文件吧,它可以提高代码的整体形象。我们的口号是:让蓝色关键字在屏幕上消失。

//in minimfc.h
#define USER_CLASS class
#define BEGIN_CLASS_DECLARATION {
#define END_CLASS_DECLARATION };
#define PRIVATE_MEMBER private:
#define PROTECTED_MEMBER protected:
#define PUBLIC_MEMBER public:
#define OPERATOR_OVERLOAD operator
#define CONSTANT_MEMBER_FUNTION const
#define BEGIN_FUNCTION_DEFINITION {
#define END_FUNCTION_DEFINITION }
typedef void AFX_RETURN_VOID_FUNCTION;
typedef int INT;
typedef int * LPINT;
typedef const int * LPCINT;
typedef void * HOBJ;

看!我们做到了。从此,我们的客户代码将这样写:

//in user.h
#include "minimfc.h"
USER_CLASS CTest
BEGIN_CLASS_DECLARATION
PRIVATE_MEMBER
        INT x;
PUBLIC_MEMBER
        AFX_RETURN_VOID_FUNCTION SetX(INT setX);
        INT GetX() CONSTANT_MEMBER_FUNTION;
        OPERATOR_OVERLOAD LPINT();
        OPERATOR_OVERLOAD LPCINT() CONSTANT_MEMBER_FUNTION;
        HOBJ GetSafeHandle() CONSTANT_MEMBER_FUNTION;
END_CLASS_DECLARATION

//in user.cpp
#include "user.h"
AFX_RETURN_VOID_FUNCTION CTest::SetX(INT setX)
BEGIN_FUNCTION_DEFINITION
        x=setX;
END_FUNCTION_DEFINITION
//...

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有