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

有关静态成员功能的要点

  • 静态成员函数不能重载
  • 任何静态成员函数都不能是虚拟的
  • 静态函数不能与此指针一起使用