C++类与static关键字
五句话概括:静态成员变量和静态成员函数都属于类的,不属于具体某个对象。
静态成员变量定义时,可以在类外定义,不受访问权限限制,但是在访问时,却要遵循访问权限限制。
静态成员函数只能访问静态成员变量。普通函数既可以访问静态成员变量,也可以访问普通成员变量。
静态成员变量存在的意义是实现数据的共享。
在静态成员函数内部可以声明静态变量,注意不是静态成员变量。如果在静态成员函数内部声明一个静态变量,则该类的所有对象将共享这个变量。
静态成员变量
静态成员变量属于类而不属于任何一个对象,如此一来可以实现数据共享功能。静态成员变量不会影响类及其对象的大小,也即sizeof结果不会受到影响。
静态成员变量如果被设置为private或protected属性,则在类外同样无法访问,但定义该变量的时候却不受此限制,如例2所示,虽然静态成员变量count为private属性,但是它在类外定义的时候不受private限制。
class student { public:student(){count ++;}~student(){count --;} private:static int count;//其它成员变量 }; int student::count = 0;//静态成员变量可以在外部用类名加上域解析符“::”加上变量名的形式定义静态成员函数
静态成员函数只能访问静态成员变量,而不能访问非静态成员变量。普通成员函数(包括构造函数和析构函数)既可以访问普通成员变量,同时又可以访问静态成员变量。
#include<iostream> using namespace std;class test { public:test(int a, int b){num = a; plus = b;}static int getnum(){return num;}static int add(){return num+plus;} //compile errorvoid setnum(int a){num = a;}void setplus(int a){plus = a;} private:static int num;int plus; }; int test::num = 1;int main() {test one;one.setnum(5);cout<<test::getnum()<<endl;return 0; }访问静态成员变量和静态成员函数均有两种方式,其一是和普通的成员变量成员函数相同,通过对象来访问,其二则是可以通过类名加上域解析操作符访问。当然访问过程中仍然要遵循private、protected和public关键字的访问权限限定。访问静态成员变量和静态成员函数首选的方法是通过类来访问,毕竟静态成员变量和静态成员函数都是属于类的,与类相关联,而不是属于类的对象。普通成员变量或成员函数不可以通过类来访问。由于静态成员变量和静态成员函数都是属于类,而不是属于对象,因此静态成员函数内部也不存在this指针,因为静态成员函数不属于对象。
在静态成员函数内部可以声明静态变量,注意不是静态成员变量。如果在静态成员函数内部声明一个静态变量,则该类的所有对象将共享这个变量。
程序运行结果:
5 5
9 4
20 11
总结
以上是生活随笔为你收集整理的C++类与static关键字的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: C++类与const关键字
- 下一篇: C++继承的概念及语法