RaymondHuang
RaymondHuang
发布于 2022-12-17 / 62 阅读
0
0

类中的静态变量与静态方法

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


评论