静态变量,指的是一个类中被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变量与方法都不影响一个对象的大小!