c的static作用
- 修饰静态局部变量
void foo()
{
static int s_var = 0;
s_var++;
cout << s_var << endl;
}
int main()
{
foo(); //输出:1
foo(); //输出:2,因为上面foo()介绍之后,s_var并没有被释放,所以再调用一次foo()就又+1
}
- 修饰全局变量
一个文件中的全局变量如果用static修饰,则这个变量不能被其它文件引用,即使用extern关键字也不行。 - 修饰函数
同上, 一个文件中的函数如果用static修饰,则这个函数不能被其它文件引用。
c++的static作用(除了c中的作用以外的)
修饰类成员:
- 修饰静态数据成员
静态数据成员共享于所有类的对象:
class Cat
{
public:
static int age; //静态数据成员;在这里(类体内)不能初始化
string color; //非静态数据成员
};
int Cat::age = 2; //静态数据成员需要在类体外进行初始化
int main()
{
Cat cat1;
Cat cat2;
cout << cat1.age << endl; //输出:2
cout << cat2.age << endl; //输出:2 (所有Cat对象的age都是一样的
}
- 修饰静态方法成员
静态方法成员和静态数据成员一样,都是类的静态成员,而不是对象成员。静态方法成员没有this指针。静态方法不能访问非静态数据成员:
class Cat
{
public:
static int age;
string color;
static void getAge()
{
cout << age << endl; //OK
cout << this->age << endl; //报错:没有this指针
}
static void getColor()
{
cout << color << endl; //报错:color是非静态数据成员
}
};