编程中,静态变量一般以m_开头。
检测到程序的有异常退出时,以不同的值return,这样后续可以知道是什么异常。
静态成员函数与无实例函数使用问题:
1,在类封装中,将函数定义为静态成员函数的好处不单是类的所有实例都可以使用,而且可以通过类名来使用静态成员函数。这样的机制使得在调用这个函数的时候并不需要将类进行实例化。
2,静态成员函数中若调用本类的成员函数,也只能调用静态成员函数,在静态成员函数中调用本类的非静态成员函数是不行的:因为静态成员函数通过类名来调用,从而没有this指针,故不能调用非静态成员函数。
3,若在调用相关函数的时候不想进行类的实例化,则将其定义为静态成员函数,但是若在其中用到而来本类的其他相关成员函数时,则会产生问题。
4、本来也可通过将所有函数所设置成静态成员函数来解决这个问题,但是把所有成员函数设置静态成员函数并不符合我们的意愿。这里我们有一个另外的解决方法:使用静态指针变量,这样做后我们不需对类进行实例化(至少是我们自己不用做这个工作)就可以使用其非静态成员函数。实例如下:
//mainserver.h
class MainServer
{
public:
static MainServer *getRef() //若不为空,则返回m_self;不然新建一个对象;
{
if (m_self) return m_self;
m_self = new MainServer();
return m_self;
};
int StartAllServer ();
int StopAllServer();
MainServer();
~MainServer();
private:
static MainServer *m_self; //定义一个静态的MainServer对象指针m_self
};
//定义了m_self之后,以后再调用MainServer成员函数的时候就可以通过m_self来实现了,而没必要实例化一个对象出来了
//mainserver.cpp
MainServer* MainServer::m_self = NULL; //初始化静态成员m_self指针
//调用class MainServer中的非静态成员函数StarteAllServer()
if( MainServer::getRef()->StartAllServer()!=0 )
{
PostMessage(WM_ICONERASEBKGND,SC_CLOSE,0L);
}
//好了,这样就可以避免我们自己去实例化了