C++静态成员

来源:互联网 发布:尚观linux培训 骗局 编辑:程序博客网 时间:2024/05/29 11:47

       对于类中的非静态数据成员,每一个类对象都拥有一个副本,即每个对象的同名数据成员可以分别存储不同的数值,这是保证每个对象都拥有区别于其他对象的特征的需要。而类中的静态成员则是解决同一个类的不同对象之间的数据和函数共享问题的。

       静态成员的特性是不管这个类创建了多少个对象,它都只有一个副本,这个副本由所属于这个类的对象共享。这种共享与全局变量或全局函数相比,既没有破坏数据隐藏的原则,又保证了安全性。

       静态成员表示整个类范围的信息,其声明以关键字static开始,包括静态数据成员和静态成员函数。


》静态数据成员

       静态数据成员声明时要使用关键字static。

      示例:

class myclass{private:static a;     //私有静态数据成员int b,c;};
      其中,a是静态数据成员,它被myclass类的所有对象所共享,但它不属于myclass类的任何一个对象,它的作用域是类范围。

      静态数据成员在每个类对象中并不占有存储空间,它只是在每个类中分配有存储空间,供所有对象公用。静态数据成员的值对每个对象都是一样的,它的值可以被任何一个对象更新,从而实现了同一类的不同对象之间的数据共享。

      静态数据成员的存储与访问:

       静态数据成员具有静态生存期,必须对它进行初始化,初始化的一般格式为:

               <数据类型><类名>::<静态数据成员名>=<初始值>;

       注:   #由于在类的声明中仅仅是对静态数据成员进行了引用性声明,因此必须在文件作用域的某个地方对静态数据成员进行定义并初始化,即应在类体外对静态数据成员进行初始化(静态数据成员的初始化与它的访问控制权限无关)。

                  #静态数据成员初始化前面不加static关键字,以免与一般静态变量或对象混淆。

                  #由于静态数据成员是类的成员,因此在初始化时必须使用作用域运算符(::)限定它所属的类。


》静态成员函数

        公有的静态数据成员可以直接访问,但是私有的或保护的静态数据成员却必须通过公有的接口进行访问,一般将这个公有的接口定义为静态成员函数。

        使用static关键字声明的成员函数就是静态成员函数,静态成员函数也属于整个类而不属于类中的某个对象,它是该类的所有对象共享的成员函数。

        静态成员函数可以在类体内定义,也可以在类外定义。在类外定义时,要注意不能使用static关键字作为前缀。

        由于静态成员函数在类中只有一个副本,因此它访问对象的成员时要受到一些限制:静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,在通过对象进行访问。一般来说,静态成员函数只访问类中的静态数据成员。

        注:公有的静态成员既可以直接使用作用域运算符通过类名进行访问,也可以通过类的任何对象进行访问,但是建议使用前者进行访问:

                <类名>::<静态数据成员名>   或 <类名>::<静态成员函数名>(<参数表>)

       使用类名和作用域运算符进行访问可以清楚地表示出静态成员是属于这个类的,而不是属于类中的某一个对象的。另外,由于静态成员在该类的任何对象被建立之前就已经存在,因此静态成员可以在程序内部不依赖于任何对象被访问,即使没有建立该类的任何一个对象时也可以使用作用域运算符通过类名访问类的公有静态成员。




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机卡注销了支付宝欠的钱怎么办 手机丢了支付宝和微信里的钱怎么办 新办的手机号已被注册支付宝怎么办 新办的移动卡不能注册支付宝怎么办 新办的宝卡支付宝注册过怎么办 办支付宝后银行卡被盗刷怎么办 微信扫二维码送平衡群发了怎么办车 拼多多没收到货点了确认收货怎么办 拼多多收货地址填错了怎么办 京东订单申请退款已发货怎么办 手机播放声音的地方进水了怎么办 手机出声音的地方进水了怎么办 手机听声音的地方进水了怎么办 装修公司我只要基装她不肯怎么办 雄迈未来家庭忘记账号和密码怎么办 地方文件和国家政策有冲突怎么办? 网上贷款放款成功没有到账怎么办 我来贷放款中不到账怎么办 手持身份证被别人网贷了怎么办 身份证被别人做了网贷怎么办 身份证丢了被别人网贷了怎么办 户口身份证被注销了网贷怎么办 首付交了贷款办不下来怎么办 付首付后贷款没有批下来怎么办 交了首付贷款没有办下来怎么办 买房交了首付贷款没批下来怎么办 交完首付办不下来贷款怎么办 房子交了首付贷款办不下来怎么办 浦发银行办理房贷流水不够怎么办 房贷审批过程中突然换工作怎么办 建行快贷结清后无额度怎么办 建设银行快贷逾期2个月怎么办 全职速卖通一个月没订单要怎么办 买家点的好评写的差评怎么办 手机流量把话费扣没了怎么办 街电忘记还怎么办3天了 街电1个星期没还怎么办 苹果手机设置密码忘记问题了怎么办 买房付了首付后无法办按揭怎么办 苹果x导入通讯录不显示名字怎么办 苹果切换了id通讯录没有了怎么办