📅  最后修改于: 2023-12-03 14:59:36.975000             🧑  作者: Mango
在C++中,static关键字用于限制变量或函数的作用域和生命周期。它可以应用于全局变量,局部变量,类的成员变量和函数,它有以下几种不同的用法:
静态全局变量是在全局作用域内声明的,但它只能在声明它的文件中访问。它与非静态全局变量相比,具有更长的作用域和更长的生命周期。静态全局变量默认初始化为0,除非显式初始化。下面是一个静态全局变量的示例:
#include<iostream>
using namespace std;
// 声明静态全局变量
static int count = 10;
int main(void)
{
while(count--)
{
cout << "count:" << count <<endl;
}
return 0;
}
静态局部变量只能在两次函数调用之间保持其值。它在函数内部声明,但在函数调用后不会被删除。与非静态局部变量不同,静态局部变量在每个函数调用之间保持其值。默认初始化为0,除非显式初始化。下面是一个静态局部变量的示例:
#include<iostream>
using namespace std;
void func(void)
{
// 声明静态局部变量
static int i = 0;
// 输出i
cout << "i:" << i << endl;
// 增加i
i++;
return;
}
int main()
{
// 调用func()两次
func();
func();
return 0;
}
静态成员变量是类的一部分,它与整个类共享。在类内部声明并在类外部初始化。它可以被所有对象共享,并且在创建任何对象之前就已经存在。静态成员变量可以通过类名访问,也可以通过对象名称访问。下面是一个静态成员变量的示例:
#include<iostream>
using namespace std;
class Box
{
public:
static int objectCount;
Box(double l=2.0, double b=2.0, double h=2.0)
{
cout <<"Constructor called." << endl;
length = l;
breadth = b;
height = h;
// 每次创建对象时增加计数器
objectCount++;
}
double Volume()
{
return length*breadth*height;
}
private:
double length;
double breadth;
double height;
};
// 初始化类的静态成员变量
int Box::objectCount = 0;
int main(void)
{
// 创建两个对象
Box box1(3.3, 1.2, 1.5);
Box box2(8.5, 6.0, 2.0);
// 输出对象计数器的值
cout << "Total objects: " << Box::objectCount << endl;
return 0;
}
静态成员函数与静态成员变量类似,它也属于类的一部分,而不属于对象的一部分。它们可以相互访问,但不能访问非静态成员变量或成员函数。静态成员函数与类的某些属性有关,而不与特定对象的属性有关。因此,它们可以被所有对象共享,也可以直接使用类名调用。下面是一个静态成员函数的示例:
#include<iostream>
using namespace std;
class Box
{
public:
static int objectCount;
Box(double l=2.0, double b=2.0, double h=2.0)
{
cout <<"Constructor called." << endl;
length = l;
breadth = b;
height = h;
// 每次创建对象时增加计数器
objectCount++;
}
double Volume()
{
return length*breadth*height;
}
static int getCount()
{
return objectCount;
}
private:
double length;
double breadth;
double height;
};
// 初始化类的静态成员变量
int Box::objectCount = 0;
int main(void)
{
// 访问静态成员函数
cout << "Total objects: " << Box::getCount() << endl;
// 创建两个对象
Box box1(3.3, 1.2, 1.5);
Box box2(8.5, 6.0, 2.0);
// 再次访问静态成员函数
cout << "Total objects: " << Box::getCount() << endl;
return 0;
}
以上就是C++中Static关键字的用法,希望能对你有所帮助。