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
有关静态成员功能的要点
- 静态成员函数不能重载
- 任何静态成员函数都不能是虚拟的
- 静态函数不能与此指针一起使用