• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            平凡的天才

            目的是為人類造福
            posts - 20, comments - 41, trackbacks - 0, articles - 6
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            static變量和static函數

            Posted on 2006-12-09 16:02 平凡的天才 閱讀(11686) 評論(4)  編輯 收藏 引用
            在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去修飾它。

            Feedback

            # re: static變量和static函數  回復  更多評論   

            2006-12-11 14:57 by 任我行
            有沒有考慮過,Static是如何實現的?
            內存和其他有何區別?

            # re: static變量和static函數  回復  更多評論   

            2009-03-02 22:55 by ski
            就沖你滿篇的嘆號,你成不了天才

            # re: static變量和static函數  回復  更多評論   

            2010-04-10 10:55 by 說說而已
            作為一位程序員,應對自己的源代碼持有最謹慎的態度

            # 有點小錯誤  回復  更多評論   

            2011-04-21 18:56 by (⊙o⊙)…
            #include <iostream>
            using namespace std;

            class A {
            public:
            static int num; // 統計創建了多少個實例
            A () {
            num++;
            } // 每創建一個實例,就讓num自增1

            // 返回通過構造函數所創建過的A類實例的數目
            static int how_many_instance() {
            return num;
            }
            };

            int A::num = 0; // 需要在類申明的外部單獨初始化!


            int main() {
            cout << A::how_many_instance() << endl;
            A a, b, c, d;
            cout << A::how_many_instance() << endl;
            system("pause");

            return 0;
            }
            91精品国产综合久久久久久 | 97精品依人久久久大香线蕉97| 久久精品成人欧美大片| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 狠狠精品久久久无码中文字幕| 久久久久无码精品国产| 99久久精品免费看国产一区二区三区| 99久久夜色精品国产网站| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 日产久久强奸免费的看| 久久夜色精品国产噜噜亚洲AV| 一级做a爰片久久毛片16| 欧美日韩中文字幕久久久不卡| 无码日韩人妻精品久久蜜桃| 国产精品成人无码久久久久久| 亚洲狠狠婷婷综合久久蜜芽| 国内精品伊人久久久久网站| 亚洲国产另类久久久精品黑人| 国产精品99久久久久久猫咪| 无码国内精品久久人妻蜜桃| 亚洲国产日韩欧美综合久久| 国产A级毛片久久久精品毛片| 男女久久久国产一区二区三区| 伊人久久大香线蕉成人| 国产精品伦理久久久久久| 91精品国产综合久久精品| 色综合久久久久久久久五月| 欧美一级久久久久久久大片 | 久久青青草视频| 久久中文字幕无码专区| 国产成人久久777777| 97超级碰碰碰碰久久久久| 久久精品国内一区二区三区| 狠狠色丁香婷婷综合久久来| 国产Av激情久久无码天堂| 久久精品中文字幕无码绿巨人| 亚洲乱码中文字幕久久孕妇黑人| 久久精品国产精品亚洲精品| 99久久精品国产一区二区| 久久久久久久久久久精品尤物 | 色狠狠久久AV五月综合|