C语言中的static
1.static修饰全局变量,改变了变量的变量的链接属性,使得这个全局变量只能在本文件中访问
2.static修饰局部变量,使其生命周期变长,直到程序运行结束才释放,被static修饰的局部变量放在静态区
3.static修饰函数,改变了函数的链接属性,只能在本文件中调用,不能被其他文件访问
C++中static
声明为static的类成员(成员数据或成员函数),称为类的静态成员
1.静态成员为所有类对象所共享,不属于某个具体的实例
2.类静态成员可用类名::静态成员或者对象.静态成员来访问
3.类静态成员变量必须在类外定义,定义时不添加static关键字
4.类的静态成员函数没有默认的this指针,因此在它里面不能使用任何非静态成员
5.静态成员和类的普通成员一样,也有public,protected,private 3种访问级别,也可以具有返回值,const修饰符等参数
6.类的静态成员函数没有默认的this指针,因此它在里面不能使用任何非静态成员
7.静态的函数(成员)在编译期间已经开辟好空间
8.在类外进行初始化,不能用参数初始化表对其初始化
在普通函数中可以访问静态的成员,但是在静态的函数不能访问普通的成员
这是因为静态的成员函数没有this指针,普通成员函数没有this指针
当调用一个对象的成员函数时(非静态成员函数),系统会把该对象的起始地址赋给成员函数的this指针。
但是静态成员函数不属于对象的成员函数,与任何对象无关,因此静态成员函数没有this指针,
既然没有指向某一对象,就无法对一个对象里的非静态成员进行默认访问(即在引用数据成员时不指定对象名)
类的静态成员使用例子:
class Point
{
public:
Point()
{
m_point++;
}
static void output()
{
cout << m_point << endl;
}
private:
static int m_point;
};
int Point::m_point = 0;
int main()
{
Point pt;
pt.output();
return 0;
}
运行结果为1.