静态变量,指的是一个类中被static修饰的变量,这个变量可以被类中的方法、对象、类名直接修改或访问:
class Student {
public:
char color;
static int n_eyes;
Student() : color('b') {}
};
int Student::n_eyes = 2; // 类变量必须要在类外部声明!
静态变量可以通过对象调用,也可以通过类名直接调用:
Student s;
cout << Student::n_eyes << endl; // 2
cout << s.n_eyes << endl; // 2
静态变量可以用过类名直接修改,也可以通过对象修改:
Student s;
s.n_eyes = 10;
cout << s.n_eyes << endl; // 10
Student::n_eyes = 20;
cout << Student::n_eyes << endl; // 20
cout << s.n_eyes << endl; // 20
和静态变量相同,静态方法也是可以被类名或对象直接调用。但是静态方法可以在类中直接声明:
class Student {
public:
char color;
static int n_eyes;
Student() : color('b') {}
static void revise(int setEyes) { // 静态函数
n_eyes = setEyes; // 访问,修改静态变量
}
};
int Student::n_eyes = 2;
int main() {
cout << Student::n_eyes << endl; // 2
Student::revise(20);
cout << Student::n_eyes << endl; // 20
Student s;
cout << s.n_eyes << endl; // 20
s.revise(30);
cout << Student::n_eyes << endl; // 30
cout << s.n_eyes << endl; // 30
return 0;
}
需要强调的是,静态函数只能修改静态变量,不能修改成员变量!因为调用静态函数的时候,如果直接使用类名调用,就不存在对象与成员变量一说!
然后,static变量并不会占用对象的内存空间,因为这和方法一样,是单独存放的,即static变量与方法都不影响一个对象的大小!