什么是静态成员?
别名也可以叫做静态数据成员,如果一个类建立了多个对象,那么每一个对象都会有自己的数据成员。这些值呢?互不相干,很好地实现了每一个对象之间的区别也就是所谓的封装和隐藏。但在有的时候,我们希望
有一些数据可以为一个类中的所有对象共有,所以c++通过静态成员变量来解决这个问题
所以说,静态成员变量是类的所有对象所共有的,都可以通过自己的下标去访问这个变量。而系统也会给静态成员单独分配一个储存的空间,不挂被定义了多少个类的对象,静态成员变量的值对于每一个对象都是一样的。如果对这个值进行修改,那么类中所有对象的这个值都会发生改变。
一,多个类使用一个静态成员变量,可以节约空间。
二,多个同类的对象共享一个静态成员变量,一个改了,全部都会改,更便于修改与维护。
一般比如,一个图书馆最多阅读书籍的数量或者是银行的利率再或者是餐饮的订餐等等
如何定义?
静态成员变量以static开头定义,格式为
static 类型名 静态成员变量名class Student{private:static int total;string name;int id;public:Student (string m,int id);void show();
}
静态成员变量的初始化
静态成员变量不能在类内进行初始化,因为它不属于某一个对象,它属于的是整个类,所以静态成员变量在类内进行初始化。
如果我们在类内定义的话,那么我们每次定义一个变量,都需要调用一次构造函数,都会对static的值进行一次改变,这显然不是我们想要达到的目的。
class Student{private:static int total;//学生数量string name;//学生姓名int id;//学号public:Student (string m,int id);void show();
}int Student :: total = 0;// 初始化在类外定义Student :: Student(string m,int id){cout << "增加一个学生" << endl;total++;// 虽然不能初始化,但是在函数里面可以使用
}
静态成员变量的使用
放到类内的时候呢?我们就是正常的使用它就可以了。但是我们如果需要在类外访问它,应该如何访问呢?
class Student{private:string name;//学生姓名int id;//学号public:static int total;//学生数量Student (string m,int id);void show();
}int Student :: total = 0;// 初始化在类外定义Student :: Student(string m,int id){cout << "增加一个学生" << endl;total++;// 虽然不能初始化,但是在函数里面可以使用
}int main(){Student :: total;//这是第一种访问Student mmm("小三月",37);mmm.total;//这是第二种访问}
静态成员函数
静态成员函数和静态成员变量大差不差,但是:静态成员函数是可以在类内定义的,和变量最大的区别就在于,变量只能在类外定义,并且必须加类限定访问符,而函数既可以在类外定义也可以在类内定义,和变量一样,在类外定义的时候不加static。
同理,可以使用和变量一样的方法,在类外去访问这个函数。(访问限定符和对象访问)
重要的点在于:非静态成员函数在对象调用的时候,会自动生成一个该对象的this指针,指向自己。但是静态成员函数没有一个固定的对象,他是所有对象的共有,所以没有this指针,所以我也没有办法去调用this指针去访问他本身。
每日金句:
追求的后面没有句号,人生也永远没有太晚的开始,只要你听从内心的召唤,勇于迈出第一步,人生的风景就永远是新奇的、美妙的。
———— 雀儿