📜  C++中的静态关键字(1)

📅  最后修改于: 2023-12-03 15:29:54.928000             🧑  作者: Mango

C++中的静态关键字

在C++中,静态关键字有多重用途,它可以用来修饰变量、函数、成员和类。本文将从不同角度介绍C++中的静态关键字。

静态变量

静态变量是在函数内部声明的,但是他们不同于普通变量。静态变量的声明可以在函数的头部,但是需要在函数外部定义。静态变量的生命周期与程序的生命周期相同。

#include <iostream>

void test()
{
  static int var = 0; // 只会初始化一次
  var++;
  std::cout << var << std::endl;
}

int main()
{
  test(); // 输出 1
  test(); // 输出 2
  test(); // 输出 3
  return 0;
}

在上面的代码中,静态变量var只会被初始化一次,当程序运行中调用多次函数test时,只会对var进行递增操作。

静态函数

静态函数是指函数的作用域被限制在声明它的文件中,即它不能被其他文件访问。静态函数可以减少程序中的命名冲突,增强了程序的可维护性。

#include <iostream>

static void test()
{
  std::cout << "Static function" << std::endl;
}

int main()
{
  test();
  return 0;
}

在上面的代码中,函数test被声明为静态函数。因此,它的作用域被限制在当前文件中。函数test打印出"Static function",在主函数中成功调用。

静态成员变量

静态成员变量是指在类中被声明为静态类型的成员变量。它们是类的公共成员,可以被所有该类的对象共享。静态成员变量只有一个副本,因此,它们的值被所有对象所共有。

#include <iostream>

class Test
{
public:
  Test() { count++; }
  static int getCount() { return count; }
private:
  static int count;
};

int Test::count = 0;

int main()
{
  Test t1; // count 被递增
  Test t2; // count 被递增
  std::cout << "Count: " << Test::getCount() << std::endl; // 输出 Count: 2
  return 0;
}

在上面的代码中,成员变量count被声明为静态类型,并在类外部定义。类Test被实例化两次,递增了count的值。通过调用它的静态成员函数getCount(),我们可以获得共享的count的值。

静态成员函数

静态成员函数与静态成员变量类似,它们只存在一个实例,并在整个程序范围内共享。静态成员函数没有隐式的this指针,它们不能访问非静态数据成员。

#include <iostream>

class Test
{
public:
  static int add(int a, int b) { return a + b; }
};

int main()
{
  std::cout << Test::add(1, 2) << std::endl; // 输出 3
  return 0;
}

在上面的代码中,函数add被声明为静态成员函数。因此,在主函数中可以通过类名调用它,而不需要实例化类。函数add接收两个参数,并返回它们的和。

静态类

静态类是指在类的声明中使用静态关键字的类。它们被限制为只能访问静态成员,不能创建任何实例。静态类通常用于存储常量和全局函数。

#include <iostream>

static class Test
{
public:
  static void sayHello() { std::cout << "Hello world!" << std::endl; }
} t;

int main()
{
  Test::sayHello(); // 输出 "Hello world!"
  return 0;
}

在上面的代码中,类Test被声明为静态类。程序中创建了一个静态实例t,调用sayHello()函数打印出"Hello world!"。

总结

现在,我们已经了解了C++中静态关键字的多种用途,包括静态变量、静态函数、静态成员变量、静态成员函数和静态类。了解这些特性可以使C++程序员在实现面向对象程序的时候更加灵活和高效。