C++中Static关键字的变体
时间:2020-02-23 14:30:05 来源:igfitidea点击:
今天,我们将在我们的C++教程系列中揭示另一个重要方面:C++中static关键字的变体。
静态关键字实际上是什么意思?
C++中的" static关键字"使任何变量,对象或者函数成为常数。
这意味着将只创建该特定变量或者函数的一个副本,并且该类的所有实例都将对其进行访问。
因此,这将有助于程序员以更好的方式辅助和管理内存,因为每次对象调用静态变量/函数时,它们仅驻留一个副本。
形式1:静态数据成员
如果C++中的任何数据成员或者变量都声明为静态,则其作用类似于类变量。
而且,只有变量的一个副本可供类对象访问。
静态变量的内存仅分配一次,并且所有调用该变量的函数都将由该变量的单个副本提供。
因此,不会创建静态变量的实例副本。
语法:成员函数中的静态变量
static data_type variable = value;
语法:类中的静态变量
#Declaration of a static variable within a class static data_type variable; #Initializing a static variable within a class data_type class_name::variable=value; #Accessing the value of a static variable within a class Class_name.variable_name;
示例1:成员函数中的静态变量
#include <iostream>
#include <string>
using namespace std;
void count_static()
{
static int stat_var = 1;
cout << stat_var <<'\t';
stat_var=stat_var*2;
}
void count_local()
{
int loc_var = 1;
cout << loc_var <<'\t';
loc_var=loc_var*2;
}
int main()
{ cout<<"Manipulation on static variable:\n";
for (int x=0; x<2; x++)
count_static();
cout<<'\n';
cout<<"Manipulation on local variable:\n";
for (int y=0; y<2; y++)
count_local();
return 0;
}
在上面的示例中,我们对静态变量和局部变量进行了操作,以了解其功能之间的区别。
当我们调用count_static()函数时,该值将被初始化并创建该变量的单个实例。
当主函数遇到count_static()函数时,变量的值将遍历该函数。
另一方面,当我们在循环中两次调用count_local()函数时,变量将每次都初始化。
因此,局部变量的值仍为1。
输出:
Manipulation on static variable: 1 2 Manipulation on local variable: 1 1
示例2:类中的静态变量
#include <iostream>
#include <string>
using namespace std;
class stat_var
{
public:
static int var;
int x;
stat_var()
{
x=0;
}
};
int stat_var::var=10;
int main()
{
stat_var V;
cout << "Static Variable:"<<V.var;
cout<<'\n';
cout<<"Local Variable:"<<V.x;
}
在上面的代码片段中,我们在类中使用了静态变量。
我们需要在类外部初始化静态变量,否则将引发异常。
此外,我们可以使用类名访问静态变量的值。
因此,我们无需为其创建对象。
输出:
Static Variable:10 Local Variable:0
形式2:C++中的静态函数
静态成员函数使用静态数据值,因此无法访问该类的任何非静态变量。
语法:静态函数定义
static return_type function_name(argument list)
语法:静态函数调用
Class_name::function_name(values)
例:
#include <iostream>
#include <string>
using namespace std;
class ABC
{
public:
static void stat_func(int a, int b)
{
static int res = a+b;
cout<<"Addition:"<<res;
}
};
int main()
{
ABC::stat_func(10,30);
}
输出:
Addition:40
有关静态成员功能的要点
- 静态成员函数不能重载
- 任何静态成员函数都不能是虚拟的
- 静态函数不能与此指针一起使用

