VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
避免因在类中使用静态函数而大量使用静态变量

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

拿来最常见的例子:线程函数。

线程函数要么是全局函数,要是是类里的静态函数。

作为全局函数的时候破坏了类的封装

而作为类的静态函数的话,又必须把静态函数中用到的成员变量、函数都改为静态、、、

总的来说就是-----用之不爽!

有什么办法既不破坏类的封装又不因为静态函数使用大量静态变量和静态函数呢?

答案:使含有静态函数的类的实例作为全局变量出现(其实这样做还是用全局、、什么道理我也讲不清,管它呢~)

举个例子吧,我要在CMainFrame里加一个ThreadProc线程函数,

这样声明

static UINT ThreadProc(LPVOID pParam);//跟平常一样

这时在ThreadProc里调用CMainFrame里的非静态函数变量就不行了

比如:UINT CMainFrame::ThreadProc(LPVOID pParam)

       {

                this->m_szMember =  pParam ; /*里会出错,说m_szMember不是静态变量不能调用,你将不得不把m_szMember设置为静态*/

                return TRUE;

      }

把CMainFrame设置为全局变量就不必了

比如,在xxxxapp.cpp中加入:

CMainFrame* pMainFrame;

在xxxxapp.h里加入extern CMainFrame* pMainFrame;

这样,你的ThreadProc可以这样写:

      UINT CMainFrame::ThreadProc(LPVOID pParam)

       {

                pMainFrame->m_szMember =  pParam ; /*m_szMember可以不是static形式了*/

                return TRUE;

      }

 

 




相关文章

相关软件