• <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>

            通關(guān)旅

            softgamer的痕跡
            posts - 16, comments - 13, trackbacks - 0, articles - 0
            ?? 靜態(tài)數(shù)據(jù)成員很像是全局變量,但static數(shù)據(jù)成員有類作用域,靜態(tài)成員可以是public,private或protected.
            ?? 靜態(tài)數(shù)據(jù)成員在文件范圍內(nèi)必須進(jìn)行一次初始化。類的public靜態(tài)成員可以通過(guò)類的任何對(duì)象訪問(wèn),也可以用二元作用域分辨符通過(guò)類名進(jìn)行訪問(wèn)。類的private和protected 靜態(tài)成員必須通過(guò)類的public成員函數(shù)或類的友元訪問(wèn)即使類沒(méi)有對(duì)象,但仍然有靜態(tài)成員。類沒(méi)有對(duì)象時(shí),要想訪問(wèn)public靜態(tài)類成員,只需在成員數(shù)據(jù)名前加上類名和二元作用域分辨符(::).要在類沒(méi)有對(duì)象時(shí)訪問(wèn)private或protected 靜態(tài)類成員,則需要提供一個(gè)public靜態(tài)成員函數(shù),并在調(diào)用函數(shù)時(shí)在函數(shù)名前面加上類名和二元作用域分辨符。

            #File Test.h
            #ifndef TEST_H
            #define TEST_H

            class Test
            {
            ?? public:
            ???????? Test( const char * , const char * );
            ???????? ~Test();
            ???????? const char *GetFstString() const;
            ???????? const char *GetLstString() const;

            ???????? static int GetCount();

            ? private:
            ???????? char * strFst;
            ???????? char * strLst;

            ???????? static int count;?

            };


            #endif
            ---------------------------------------------------------------------------------
            #File Test.cpp
            #include <iostream>

            using std::cout;
            using std::endl;

            #include <cstring>
            #include <cassert>
            #include "Test.h"

            int Test::count = 0;

            int Test::GetCount() { return count ; }


            Test::Test( const char * sFst, const char * sLst )
            {
            ?? strFst = new char[ strlen( sFst ) + 1 ];
            ?? assert( strFst != 0 );
            ?? strcpy( strFst, sFst );
            ?
            ?? strLst = new char[ strlen( sLst ) + 1 ];
            ?? assert( strLst != 0 );
            ?? strcpy( strLst, sLst );?

            ?? count++; // inc static count

            ?? cout << " Test cons for " << strFst
            ??????? << "? " << strLst << " called. " << endl;
            }
            ?
            Test::~Test()
            {
            ?? cout << " ~Test() called for " << strFst
            ??????? << " " << strLst << endl;
            ?? delete [] strFst;
            ?? delete [] strLst;
            ?? count--;
            }

            const char * Test::GetFstString() const
            {
            ??? return strFst;
            }

            const char * Test::GetLstString() const
            {
            ??? return strLst;
            }

            --------------------------------------------------------------------------------
            #File: main.cpp
            #include <iostream>

            using std::cout;
            using std::endl;

            #include "Test.h"

            int main()
            {
            ?? cout << "before cons is "
            ??????? << Test::GetCount() << endl; // use class name

            ?? Test *pTest1 = new Test( "FstTest1", "LstTest1" );
            ?? Test *pTest2 = new Test( "FstTest2", "LstTest2" );

            ?? cout << "after cons is "
            ??????? << pTest1->GetCount();? //using instan

            ?? cout << "\n\nTest1: "
            ??????? << pTest1->GetFstString()
            ??????? << " " << pTest1->GetLstString()
            ??????? << "\nTest2:"
            ??????? << pTest2->GetFstString()
            ??????? << " " << pTest2->GetLstString() << "\n\n" << endl;

            ?? delete pTest1;
            ?? pTest1 = 0;
            ?? delete pTest2;
            ?? pTest2 = 0;

            ?? cout << "num after deletion is "
            ??????? << Test::GetCount() << endl;

            ?? return 0;
            ??????
            }
            -------------------------------------------------------------------------------------------

            Result:
            before cons is 0
            ?Test cons for FstTest1? LstTest1 called.
            ?Test cons for FstTest2? LstTest2 called.
            after cons is 2

            Test1: FstTest1 LstTest1
            Test2:FstTest2 LstTest2


            ?~Test() called for FstTest1 LstTest1
            ?~Test() called for FstTest2 LstTest2
            num after deletion is 0

            ?? Test類在沒(méi)有對(duì)象時(shí),仍然可以引用count成員,但是只能通過(guò)調(diào)用靜態(tài)成員函數(shù)GetCount()完成.
            ?? 沒(méi)有實(shí)例化的對(duì)象,一定是用類名調(diào)用Test::GetCount(),如果有實(shí)例化的對(duì)象,則可以用pTest1->GetCount()
            調(diào)用。我們公司明確規(guī)定,所有靜態(tài)成員函數(shù)只能調(diào)用類名句柄,不能調(diào)用對(duì)象句柄,我覺(jué)得這樣很好。


            ?? 還有一點(diǎn),如果成員函數(shù)不訪問(wèn)非靜態(tài)數(shù)據(jù)成員和成員函數(shù),可以將成員函數(shù)聲明為靜態(tài),與非靜態(tài)成員函數(shù)不同的是,靜態(tài)成員函數(shù)沒(méi)有this指針,因?yàn)殪o態(tài)類數(shù)據(jù)成員和成員函數(shù)是獨(dú)立于類對(duì)象而存才的。
            ?
            ?? 關(guān)于斷言(assert) , assert類宏在cassert頭文件中定義。用于測(cè)試條件值,注意assert不運(yùn)行任何析構(gòu)函數(shù)即可中止程序執(zhí)行. assert不一定要在調(diào)試完成后刪除,只需在程序文件開(kāi)頭(通常可以在編譯器選項(xiàng)中指定)插入語(yǔ)句
            #define NDEBUG


            精品一久久香蕉国产线看播放| 国产精品对白刺激久久久| 久久91综合国产91久久精品| 久久精品国产亚洲av水果派| 国产精品久久久久影院嫩草 | 国产A级毛片久久久精品毛片| 久久国产亚洲精品麻豆| 欧美伊人久久大香线蕉综合69| 久久人人爽人人爽人人av东京热| 久久精品国产乱子伦| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久综合亚洲欧美成人| 伊人色综合久久| 超级97碰碰碰碰久久久久最新 | 久久久人妻精品无码一区| 亚洲中文字幕无码久久综合网| 久久久久人妻一区二区三区vr| 香港aa三级久久三级老师2021国产三级精品三级在| 久久九九免费高清视频| 久久精品国产99久久久| 亚洲精品国产综合久久一线| 99久久亚洲综合精品成人| 日韩久久久久中文字幕人妻| 国产精品久久影院| 久久久久99精品成人片直播| 亚洲国产成人久久一区久久| 99久久婷婷国产综合精品草原| 996久久国产精品线观看| 久久亚洲sm情趣捆绑调教 | 久久久久亚洲AV成人网人人网站 | 午夜精品久久久久久久| 久久天天日天天操综合伊人av| 国产精品九九久久免费视频 | 久久福利青草精品资源站| 日产精品久久久久久久性色| 久久久久国产精品人妻| 思思久久好好热精品国产| 久久久久香蕉视频| 日韩电影久久久被窝网| 看全色黄大色大片免费久久久 | 久久午夜无码鲁丝片秋霞|