• <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++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            在C語(yǔ)言編程中,static的一個(gè)作用是信息屏蔽!

            比方說(shuō),你自己定義了一個(gè)文件?--?該文件中有一系列的函數(shù)以及變量的聲明和定義!

            你希望該文件中的一些函數(shù)和變量只能被該文件中的函數(shù)使用,那么,你可以在該函數(shù)、變量的前面加上static,代表他們只能被當(dāng)前文件中的函數(shù)使用!


            而在C++中,用static來(lái)作為信息屏蔽就顯得沒(méi)有必要了!因?yàn)椋珻++有了信息屏蔽的利器?--?class機(jī)制!

            類中的private屬性的變量和函數(shù)就對(duì)外禁止訪問(wèn)!


            然后是C/C++通用的函數(shù)作用域的static型的變量!其目的,也是為了信息的屏蔽!


            int?fun()?{
            ???static?int?a?=?1;
            ???a++;
            }

            在第一次進(jìn)入這個(gè)函數(shù)的時(shí)候,變量a被初始化為1!并接著自增1!

            以后每次進(jìn)入該函數(shù),a就不會(huì)被再次初始化了,僅進(jìn)行自增1的操作!

            在static發(fā)明前,要達(dá)到同樣的功能,則只能使用全局變量:

            int?a?=?1;

            int?fun()?{
            ???a++;
            }

            那么,a的值就有可能被其他函數(shù)所改變!



            最后,說(shuō)說(shuō)類中的static變量和函數(shù)。


            這種存儲(chǔ)屬性的變量和函數(shù)是同一種類的不同實(shí)例之間通信的橋梁!


            #include?<iostream>
            using?namespace?std;

            class?A?{
            public:
            ????static?int?num;????//????統(tǒng)計(jì)創(chuàng)建了多少個(gè)實(shí)例
            ????A?()?{num++};????//????每創(chuàng)建一個(gè)實(shí)例,就讓num自增1

            ????//????返回通過(guò)構(gòu)造函數(shù)所創(chuàng)建過(guò)的A類實(shí)例的數(shù)目
            ????static?int?how_many_instance()?{
            ????????return?num;
            ????}
            }

            static?A::num?=?0;????//????需要在類申明的外部單獨(dú)初始化!


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


            一般,在類內(nèi)部,是通過(guò)static屬性的函數(shù),訪問(wèn)static屬性的變量!

            補(bǔ)充一點(diǎn),在類中,static型的成員函數(shù),由于是類所擁有的,而不是具體對(duì)象所有的,這一點(diǎn)對(duì)于windows的回調(diào)機(jī)制非常有用。
            因?yàn)閷?duì)于回調(diào)函數(shù)而言,windows不會(huì)借助任何對(duì)象去調(diào)用它,也就不會(huì)傳遞this指針,那么對(duì)于一般成員函數(shù)作為回調(diào)函數(shù)的后果,就是堆棧中有一個(gè)隨機(jī)的變量會(huì)成為this指針,這當(dāng)然會(huì)引發(fā)程序的崩潰。
            而static函數(shù),由于是整個(gè)類的,屏蔽了this指針。因此,如果成員函數(shù)作為回調(diào)函數(shù),就應(yīng)該用static去修飾它。

            Feedback

            # re: static變量和static函數(shù)  回復(fù)  更多評(píng)論   

            2006-12-11 14:57 by 任我行
            有沒(méi)有考慮過(guò),Static是如何實(shí)現(xiàn)的?
            內(nèi)存和其他有何區(qū)別?

            # re: static變量和static函數(shù)  回復(fù)  更多評(píng)論   

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

            # re: static變量和static函數(shù)  回復(fù)  更多評(píng)論   

            2010-04-10 10:55 by 說(shuō)說(shuō)而已
            作為一位程序員,應(yīng)對(duì)自己的源代碼持有最謹(jǐn)慎的態(tài)度

            # 有點(diǎn)小錯(cuò)誤  回復(fù)  更多評(píng)論   

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

            class A {
            public:
            static int num; // 統(tǒng)計(jì)創(chuàng)建了多少個(gè)實(shí)例
            A () {
            num++;
            } // 每創(chuàng)建一個(gè)實(shí)例,就讓num自增1

            // 返回通過(guò)構(gòu)造函數(shù)所創(chuàng)建過(guò)的A類實(shí)例的數(shù)目
            static int how_many_instance() {
            return num;
            }
            };

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


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

            return 0;
            }

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            要久久爱在线免费观看| 久久97久久97精品免视看| 精品国产乱码久久久久久人妻 | 尹人香蕉久久99天天拍| 久久99热这里只频精品6| 久久久久亚洲AV综合波多野结衣 | 99久久精品免费看国产免费| 久久一区二区三区99| 久久午夜夜伦鲁鲁片免费无码影视| 色婷婷综合久久久久中文一区二区 | 久久噜噜电影你懂的| 性做久久久久久久久老女人| 国产亚洲精久久久久久无码| 久久99精品国产麻豆蜜芽| 久久精品国产日本波多野结衣| 久久精品国产99国产精品澳门 | 无码人妻少妇久久中文字幕蜜桃| 久久国产影院| 久久99国产综合精品| 伊人久久五月天| 91精品婷婷国产综合久久| 欧洲人妻丰满av无码久久不卡| 久久人人爽人人爽人人片AV麻豆| 九九久久自然熟的香蕉图片| 欧美黑人激情性久久| 久久99国产一区二区三区| 久久久青草青青亚洲国产免观| 伊人久久综合精品无码AV专区| 久久久久久久综合日本| 国产综合精品久久亚洲| 久久精品免费观看| 久久99精品久久久久久久久久| 波多野结衣AV无码久久一区| 伊人久久大香线蕉无码麻豆| 久久人人爽人人爽人人片AV东京热| 久久国产精品99久久久久久老狼 | 久久久久综合中文字幕| 国产精品久久久久久福利69堂| 久久久久亚洲av无码专区喷水| 午夜精品久久久久久久| 亚洲欧美日韩久久精品第一区|