Static静态成员函数的使用
2008-09-27 15:00
411 查看
static可以在类中声明为静态数据成员和静态成员函数:
表示为静态函数,它为所有类共有的。调用该函数直接使用类名加上修饰符
静态函数只能处理静态数据成员,不能处理非静态程序,如:
class Window
{
public:
static void W_SIZE();
private:
int a;
static int s;
};
Window::W_SIZE()
{
a = 2; //错误,不能处理非静态成员
s = 1; //正确
}
static在C++,JAVA,C#里意义大致一样,声明一个静态函数,此函数可以并且只能用它的所在的类名调用,有一点要注意,静态函数的生命周期是从函数调用一直到整个程序结束,一直占用内存,大量使用会降低程序性能,不要随便使用 ,
主要用于CreateThread()中。因为静态成员函数无法调用非静态成员进行处理,所以必须要调用一个非静态成员函数进行事务处理.
DWORD dwID;
HANDLE hHandle = ::CreateThread(NULL,0,ThreadProc,(CTest*)ptr,0,&dwID);
class CTest
{
public:
static DWORD WINAPI ThreadProc(LPVOID lParam);
DWORD MainFunc();
}
DWORD WINAPI CTest::ThreadProc(LPVOID lParam)
{
CTest* pDlg = (CTest*)lParam;
return pDlg->MainFunc();
}
DWORD CTest::MainFunc()
{
HANDLE hWait[4];
hWait[0] = m_hWait1;
hWait[1] = m_hWait2;
hWait[2] = m_hWait3;
hWait[3] = m_hWait4;
DWORD dwEvent = ::WaitForMultipleObjects(4,hWait,TRUE,INFINITE);
switch(dwEvent)
{
case WAIT_OBJECT_0:
{
AfxMessageBox("1");
}
break;
case WAIT_OBJECT_0+1:
{
AfxMessageBox("2");
}
break;
case WAIT_OBJECT_0+2:
{
AfxMessageBox("3");
}
break;
case WAIT_OBJECT_0+3:
{
AfxMessageBox("4");
}
break;
case WAIT_TIMEOUT:
{
}
break;
default:
break;
}
return 0;
}
表示为静态函数,它为所有类共有的。调用该函数直接使用类名加上修饰符
静态函数只能处理静态数据成员,不能处理非静态程序,如:
class Window
{
public:
static void W_SIZE();
private:
int a;
static int s;
};
Window::W_SIZE()
{
a = 2; //错误,不能处理非静态成员
s = 1; //正确
}
static在C++,JAVA,C#里意义大致一样,声明一个静态函数,此函数可以并且只能用它的所在的类名调用,有一点要注意,静态函数的生命周期是从函数调用一直到整个程序结束,一直占用内存,大量使用会降低程序性能,不要随便使用 ,
主要用于CreateThread()中。因为静态成员函数无法调用非静态成员进行处理,所以必须要调用一个非静态成员函数进行事务处理.
DWORD dwID;
HANDLE hHandle = ::CreateThread(NULL,0,ThreadProc,(CTest*)ptr,0,&dwID);
class CTest
{
public:
static DWORD WINAPI ThreadProc(LPVOID lParam);
DWORD MainFunc();
}
DWORD WINAPI CTest::ThreadProc(LPVOID lParam)
{
CTest* pDlg = (CTest*)lParam;
return pDlg->MainFunc();
}
DWORD CTest::MainFunc()
{
HANDLE hWait[4];
hWait[0] = m_hWait1;
hWait[1] = m_hWait2;
hWait[2] = m_hWait3;
hWait[3] = m_hWait4;
DWORD dwEvent = ::WaitForMultipleObjects(4,hWait,TRUE,INFINITE);
switch(dwEvent)
{
case WAIT_OBJECT_0:
{
AfxMessageBox("1");
}
break;
case WAIT_OBJECT_0+1:
{
AfxMessageBox("2");
}
break;
case WAIT_OBJECT_0+2:
{
AfxMessageBox("3");
}
break;
case WAIT_OBJECT_0+3:
{
AfxMessageBox("4");
}
break;
case WAIT_TIMEOUT:
{
}
break;
default:
break;
}
return 0;
}
相关文章推荐
- static 静态成员变量 静态成员函数 类中使用
- 类的静态成员函数带来了什么好处,应该在什么时候使用?
- Static 静态成员函数-与多线程
- static 静态变量和静态成员函数
- static函数 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针;类的static成员函数
- C++静态成员变量和静态成员函数的使用方法总结
- 类的静态成员变量和静态成员函数的使用
- 类的静态成员函数和静态成员变量的使用
- 从零开始学C++之对象的使用(一):static 成员变量、static 成员函数、类/对象的大小
- iOS安全–使用static inline方式编译函数,防止静态分析
- 类的静态成员函数和静态成员变量的使用
- C++ 静态成员函数使用不需要声明
- static静态成员变量和静态成员函数
- 浅出理解静态成员函数(static member function)
- 类非静态成员的函数指针 的使用 Function pointer of a non-static member function of a class
- C++静态成员变量和静态成员函数使用总结
- C++静态成员变量和静态成员函数使用总结
- 类的静态成员函数带来了什么好处,应该在什么时候使用?
- static 静态成员函数
- C++使用线程函数pthread_create时,调用的成员函数要定义为静态成员函数