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
    关注研究新技术
  • 相关阅读:
    Unix命令大全
    vs2008 与 IE8出现的兼容性问题
    Java 创建文件、文件夹以及临时文件
    如何修改Wamp中mysql默认空密码
    PAT 乙级真题 1003.数素数
    Tags support in htmlText flash as3
    DelphiXE4 FireMonkey 试玩记录,开发IOS应用 还是移植
    10 Great iphone App Review sites to Promote your Apps!
    HTML tags in textfield
    Delphi XE4 IOS 开发, "No eligible applications were found“
  • 原文地址:https://www.cnblogs.com/heidsoft/p/3417245.html
Copyright © 2011-2022 走看看