zoukankan      html  css  js  c++  java
  • static变量和static函数

    在C语言编程中,static的一个作用是信息屏蔽
    比方说,你自己定义了一个文件 -- 该文件中有一系列的函数以及变量的声明和定义!
    你希望该文件中的一些函数和变量只能被该文件中的函数使用,那么,你可以在该函数、变量的前面加上static,代表他们只能被当前文件中的函数使用!
    而在C++中,用static来作为信息屏蔽就显得没有必要了!因为,C++有了信息屏蔽的利器 -- class机制!
    类中的private属性的变量和函数就对外禁止访问!
    然后是C/C++通用的函数作用域的static型的变量!其目的,也是为了信息的屏蔽!
    int fun() {
       static int a = 1;
       a++;
    }
    在第一次进入这个函数的时候,变量a被初始化为1!并接着自增1!
    以后每次进入该函数,a就不会被再次初始化了,仅进行自增1的操作!
    在static发明前,要达到同样的功能,则只能使用全局变量:
    int a = 1;
    int fun() {
       a++;
    }
    那么,a的值就有可能被其他函数所改变!
    最后,说说类中的static变量和函数。
    这种存储属性的变量和函数是同一种类的不同实例之间通信的桥梁!
    #include <iostream>
    using namespace std;
    class A {
    public:
        static int num;    //    统计创建了多少个实例
        A () {num++};    //    每创建一个实例,就让num自增1
        //    返回通过构造函数所创建过的A类实例的数目
        static int how_many_instance() {
            return num;
        }
    }
    static A::num = 0;    //    需要在类申明的外部单独初始化!
    int main() {
        cout << A::how_many_instance() << endl;
        A a, b, c, d;
        cout << A::how_many_instance() << endl;
        system("pause");
    }
    一般,在类内部,是通过static属性的函数,访问static属性的变量!
    补充一点,在类中,static型的成员函数,由于是类所拥有的,而不是具体对象所有的,这一点对于windows的回调机制非常有用。
    因为对于回调函数而言,windows不会借助任何对象去调用它,也就不会传递this指针,那么对于一般成员函数作为回调函数的后果,就是堆栈中有一个随机的变量会成为this指针,这当然会引发程序的崩溃。
    而static函数,由于是整个类的,屏蔽了this指针。因此,如果成员函数作为回调函数,就应该用static去修饰它。

    黑洞@heidsoft
    Github:https://github.com/heidsoft
    微博:http://weibo.com/liuganbin
    热衷云计算和大数据
    关注CloudStack,OpenStack,Linux c/c++/python/java
    关注研究新技术
  • 相关阅读:
    PyCharm专业版永久激活步骤详解(只是自己记一下以防后面需要)
    PV EV AC BAC EAC ETC等计算公式
    Linux服务器下安装Jmeter
    Python接口自动化测试运行成功但没有生成测试报告的总结
    Linux命令
    Python3+selenium环境配置
    selenium窗口切换问题
    Selenium安装问题
    Python爬虫功能(爬取网页图片)
    ASICC码对照表
  • 原文地址:https://www.cnblogs.com/heidsoft/p/3417245.html
Copyright © 2011-2022 走看看