📅  最后修改于: 2023-12-03 15:29:54.928000             🧑  作者: Mango
在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++程序员在实现面向对象程序的时候更加灵活和高效。