static的作用

来源:互联网 发布:飞立信大数据 编辑:程序博客网 时间:2024/05/18 01:35

static是静态的意思,可以用于修饰变量和函数。在c语言中,其有三个作用,(1)存储区域属于静态存储区 ,改变变量的生存周期,如局部变量变成静态局部变量。(2)初始化默认为0,例如给一个数组或者字符数组初始化0时,省去工作,这功能得益于其存储变变量的静态存储区,默认初始化为0。(3)作用范围,只在本地的源文件中起作用,相对于全局变量(如果在另一个源文件中使用,需要在另一个源文件中用extern 声明)来说限制了其范围,静态全局变量和静态全局函数在另一个源文件中不起作用;这样的好处是,在另一个源文件中可以定义相同的静态全局变量,不同程序员在不同的源文件中使用相同的函数和变量名时没有冲突。
参考:http://www.cnblogs.com/dc10101/archive/2007/08/22/865556.html
c++中的static的静态函数和非静态函数区别,静态函数只能访问其静态成员,不能访问其非静态成员,因为静态成员函数中没有this指针,但是通常静态成员函数中经常需要访问非静态变量和调用非静态函数,怎么解决呢?需要引入指向本身变量指针。

静态成员函数和普通成员函数区别:

区别1:

        静态成员函数实际上是一个全局函数,不依赖一个类的对象. 而属于类,不创建对象也可调用。

        普通成员函数依赖一个类的对象,也就是它有一个隐藏的调用参数(this)指针,必须指向一个类的对象。

区别2:

       静态函数只能访问类中的静态成员变量;

区别3::    

        如果类的成员函数想作为回调函数来使用,如创建线程等,一般只能将它定义为静态成员函数才行。


静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存。静态成员函数没有隐含的this自变量。所以,它就无法访问自己类的非静态成员。解决方法:先声明一个自己类型的静态变量m_staticSelf,然后对其进行this赋值,最后在静态函数中调用对应m_staticSefl中的函数或变量即可,其实就是间接的调用自己的函数或变量。

例子1:

.h

class RecorderNative 


private: 
static RecorderNative* m_staticSelf; 
int m_nMark; 
public: 
RecorderNative(); 
~RecorderNative(); 
private: 
static DWORD WINAPI ThreadProc(LPVOID lpParam); 
void Process( ); 
};
RecorderNative::RecorderNative() 

m_staticSelf = this; 
}
{
m_staticSelf->Process(); 
return 0; 
}

m_nMark = 1; 
}

.cpp

RecorderNative* RecorderNative::m_staticSelf; 

RecorderNative::~RecorderNative() 

}

DWORD WINAPI RecorderNative::ThreadProc(LPVOID lpParam) 


void RecorderNative::Process( ) 

参考:http://blog.csdn.net/xx780452700/article/details/52884789

或者例子2:

class a
{
public:
  
static FunctionA(a* _a)
  
{
    a
-> menber = 1;
  }


private:
  
int menber;
}

参考:http://blog.csdn.net/jiahehao/article/details/3727352


原创粉丝点击