在C++中,静态成员变量和函数是和类本身关联而非和类对象关联的。静态成员变量和函数是在程序运行时被分配和初始化的,而不是在每个类对象初始化时被分配和初始化的。在定义静态成员变量或函数时需要使用static关键字。
- 静态成员变量
静态成员变量是属于类本身而不是类的每个对象的成员变量。在声明静态变量时,需要在前面加上static关键字。
下面是一个静态成员变量的例子:
class MyClass {
public:
static int myStaticVar; //声明静态成员变量
};
int MyClass::myStaticVar = 0; //静态成员变量需要在类外部进行初始化
int main() {
MyClass obj1, obj2;
obj1.myStaticVar = 10;
obj2.myStaticVar = 20;
cout << obj1.myStaticVar << endl; //输出20
cout << obj2.myStaticVar << endl; //输出20
return 0;
}
在这个例子中,myStaticVar是属于MyClass类本身而不是MyClass的每个对象的变量。同时,在main函数中,可以使用任何MyClass对象来访问和修改myStaticVar变量。因此,无论你使用obj1对象还是obj2对象,输出的结果都是20。
- 静态成员函数
静态成员函数是属于类本身而不是类的每个对象的函数。在声明静态函数时,需要在前面加上static关键字。静态成员函数可以直接通过类名来调用,无需使用对象。
下面是一个静态成员函数的例子:
class MyClass {
public:
static int myStaticFunc() { //声明静态成员函数
static int count = 0;
count++;
return count;
}
};
int main() {
cout << MyClass::myStaticFunc() << endl; //输出1
cout << MyClass::myStaticFunc() << endl; //输出2
return 0;
}
在这个例子中,myStaticFunc是属于MyClass类本身而不是MyClass的每个对象的函数。因此,可以直接通过MyClass::myStaticFunc()调用。静态成员函数可以访问静态数据成员,但不能访问非静态数据成员。在上面的例子中,myStaticFunc函数对静态局部变量count进行初始化和自增,每次调用myStaticFunc函数count的值会加1。