📜  C ++ |静态关键字|问题3(1)

📅  最后修改于: 2023-12-03 14:59:36.975000             🧑  作者: Mango

C++中的Static关键字

在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关键字的用法,希望能对你有所帮助。