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指针,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数

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

  • 相关阅读:
    inner join和join
    Java输入输出流
    数据库基础——并发控制
    逻辑题
    数据库基础——数据库设计
    JDBC
    XmlHttpRequest
    servlet乱码
    Tomcat缺少服务
    poj2388---求奇数个数字的最中间的数
  • 原文地址:https://www.cnblogs.com/AntonioSu/p/12272189.html
Copyright © 2011-2022 走看看