zoukankan      html  css  js  c++  java
  • C++ static 字段

    1  全局变量

    全局变量申明之前冠以static 就构成了静态的全局变量。

    全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。

    全局变量和静态全局变量相同点:

    二者都存储在全局区

    全局变量(小)和静态全局变量(大)的作用域不同:

    非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。

    静态全局变量的作用域是只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 

    2  局部变量

    静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区。

    内存分配方式参考:https://www.cnblogs.com/AntonioSu/p/12273116.html

    3  函数

    函数的使用方式与全局变量类似,在函数的返回类型前加上static,就是静态函数。其特性如下:

    • 静态函数只能在声明它的文件中可见,其他文件不能引用该函数
    • 不同的文件可以使用相同名字的静态函数,互不影响

    4  面向对象

    A.   静态数据成员

    在类内数据成员的声明前加上static关键字,该数据成员就是类内的静态数据成员。

    其特点如下:

    1)静态数据成员存储在全局数据区,静态数据成员在定义时分配存储空间,所以不能在类声明中定义。

    2)静态数据成员是类的成员,无论定义了多少个类的对象,静态数据成员只有一个,且对该类的所有对象可见。也就是说任一对象都可以对静态数据成员进行操作。而对于非静态数据成员,每个对象都有自己的一份拷贝。

    3)静态数据成员也遵从public, protected, private访问规则。

    由于上面的原因,静态数据成员不属于任何对象,在没有类的实例时其作用域就可见,在没有任何对象时,就可以进行操作。

    同全局变量相比,使用静态数据成员有两个优势:

    静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其它全局名字冲突的可能性。

    可以实现信息隐藏。静态数据成员可以是private成员,而全局变量不能

    B.   静态成员函数

    与静态数据成员类似,静态成员函数属于整个类,而不是某一个对象。

    其特性如下:

    静态成员函数没有this指针,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数

    非静态成员函数可以任意地访问静态成员函数和静态数据成员。

  • 相关阅读:
    使用Oracle ODP.NET 11g的.NET程序发布方法
    Client使用c#和odp.net连接server oracle
    打造百度网盘备份利器:自动备份Linux VPS文件和多线程下载百度网盘资源
    安装软件:/lib/ld-linux.so.2: bad ELF interpreter解决
    ArcSDE数据库连接(直连、服务连)与GT_Geometry存
    AE的Annotation学习摘记
    Samba简单配置--匿名用户共享资料可读可写的实现
    Sublime Text 2 使用心得
    ArcGIS Server启动服务报:ERROR: Unable to start Xvfb on any port in the range 6600
    [DataContract] 和[DataMember]
  • 原文地址:https://www.cnblogs.com/AntonioSu/p/12272189.html
Copyright © 2011-2022 走看看