久久久国产精品秘人口麻豆|永久免费AV无语国产|人成电影免费中文字幕|久久AV嫩草影院2

    1. <dfn id="yitbn"><samp id="yitbn"><progress id="yitbn"></progress></samp></dfn>

          <div id="yitbn"></div>

          1. 首頁(yè) - 網(wǎng)校 - 萬(wàn)題庫(kù) - 直播 - 雄鷹 - 團(tuán)購(gòu) - 書城 - ? - 學(xué)習(xí)通 - 導(dǎo)航 - 510 -
            首頁(yè)考試吧網(wǎng)校萬(wàn)題庫(kù)直播雄鷹510團(tuán)購(gòu)書城?論壇實(shí)用文檔作文大全寶寶起名
            2015中考
            法律碩士
            2015高考
            MBA考試
            2015考研
            MPA考試
            在職研
            中科院
            考研培訓(xùn)
            專升本
            自學(xué)考試 成人高考
            四 六 級(jí)
            GRE考試
            攻碩英語(yǔ)
            零起點(diǎn)日語(yǔ)
            職稱英語(yǔ)
            口譯筆譯
            申碩英語(yǔ)
            零起點(diǎn)韓語(yǔ)
            商務(wù)英語(yǔ)
            日語(yǔ)等級(jí)
            GMAT考試
            公共英語(yǔ)
            職稱日語(yǔ)
            新概念英語(yǔ)
            專四專八
            博思考試
            零起點(diǎn)英語(yǔ)
            托?荚
            托業(yè)考試
            零起點(diǎn)法語(yǔ)
            雅思考試
            成人英語(yǔ)三級(jí)
            零起點(diǎn)德語(yǔ)
            等級(jí)考試
            華為認(rèn)證
            水平考試
            Java認(rèn)證
            職稱計(jì)算機(jī) 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
            公 務(wù) 員
            導(dǎo)游考試
            物 流 師
            出版資格
            單 證 員
            報(bào) 關(guān) 員
            外 銷 員
            價(jià)格鑒證
            網(wǎng)絡(luò)編輯
            駕 駛 員
            報(bào)檢員
            法律顧問(wèn)
            管理咨詢
            企業(yè)培訓(xùn)
            社會(huì)工作者
            銀行從業(yè)
            教師資格
            營(yíng)養(yǎng)師
            保險(xiǎn)從業(yè)
            普 通 話
            證券從業(yè)
            跟 單 員
            秘書資格
            電子商務(wù)
            期貨考試
            國(guó)際商務(wù)
            心理咨詢
            營(yíng) 銷 師
            司法考試
            國(guó)際貨運(yùn)代理人
            人力資源管理師
            廣告師職業(yè)水平
            衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護(hù)士
            會(huì)計(jì)從業(yè)資格
            基金從業(yè)資格
            統(tǒng)計(jì)從業(yè)資格
            經(jīng)濟(jì)師
            精算師
            統(tǒng)計(jì)師
            會(huì)計(jì)職稱
            法律顧問(wèn)
            ACCA考試
            初級(jí)會(huì)計(jì)職稱
            資產(chǎn)評(píng)估師
            高級(jí)經(jīng)濟(jì)師
            注冊(cè)會(huì)計(jì)師
            高級(jí)會(huì)計(jì)師
            美國(guó)注冊(cè)會(huì)計(jì)師
            審計(jì)師考試
            國(guó)際內(nèi)審師
            注冊(cè)稅務(wù)師
            理財(cái)規(guī)劃師
            一級(jí)建造師
            安全工程師
            設(shè)備監(jiān)理師
            公路監(jiān)理師
            公路造價(jià)師
            二級(jí)建造師
            招標(biāo)師考試
            物業(yè)管理師
            電氣工程師
            建筑師考試
            造價(jià)工程師
            注冊(cè)測(cè)繪師
            質(zhì)量工程師
            巖土工程師
            注冊(cè)給排水
            造價(jià)員考試
            注冊(cè)計(jì)量師
            環(huán)保工程師
            化工工程師
            暖通工程師
            咨詢工程師
            結(jié)構(gòu)工程師
            城市規(guī)劃師
            材料員考試
            消防工程師
            監(jiān)理工程師
            房地產(chǎn)估價(jià)
            土地估價(jià)師
            安全評(píng)價(jià)師
            房地產(chǎn)經(jīng)紀(jì)人
            投資項(xiàng)目管理師
            環(huán)境影響評(píng)價(jià)師
            土地登記代理人
            寶寶起名
            繽紛校園
            實(shí)用文檔
            入黨申請(qǐng)
            英語(yǔ)學(xué)習(xí)
            思想?yún)R報(bào)
            作文大全
            工作總結(jié)
            求職招聘 論文下載 直播課堂

            2015年國(guó)家計(jì)算機(jī)二級(jí)C++考試復(fù)習(xí)資料(7)

            考試吧整理了“2015年國(guó)家計(jì)算機(jī)二級(jí)C++考試復(fù)習(xí)資料”,提供給各位考生備考,更多考試資料請(qǐng)持續(xù)關(guān)注考試吧計(jì)算機(jī)等級(jí)考試頻道!

              點(diǎn)擊查看:2015年國(guó)家計(jì)算機(jī)二級(jí)C 考試復(fù)習(xí)資料匯總

              二級(jí)C++輔導(dǎo)筆記:類和堆

              一、構(gòu)造函數(shù)和析構(gòu)函數(shù)

              前面的例子已經(jīng)運(yùn)用了new和delete來(lái)為類對(duì)象分配和釋放內(nèi)存。當(dāng)使用new為類對(duì)象分配內(nèi)存時(shí),編譯器首先用new運(yùn)算符分配內(nèi)存,然后調(diào)用類的構(gòu)造函數(shù);類似的,當(dāng)使用delete來(lái)釋放內(nèi)存時(shí),編譯器會(huì)首先調(diào)用淚的析構(gòu)函數(shù),然后再調(diào)用delete運(yùn)算符。

              #include iostream.h

              class Date

              {

              int mo,da,yr;

              public:

              Date() { cout < ~Date() { cout< }

              int main()

              {

              Date* dt = new Date;

              cout < delete dt;

              return 0;

              }

              程序定義了一個(gè)有構(gòu)造函數(shù)和析構(gòu)函數(shù)的Date類,這兩個(gè)函數(shù)在執(zhí)行時(shí)會(huì)顯示一條信息。當(dāng)new運(yùn)算符初始化指針dt時(shí),執(zhí)行了構(gòu)造函數(shù),當(dāng)delete運(yùn)算符釋放內(nèi)存時(shí),又執(zhí)行了析構(gòu)函數(shù)。

              程序輸出如下:

              Date constructor

              Process the date

              Date destructor

              二、堆和類數(shù)組

              前面提到,類對(duì)象數(shù)組的每個(gè)元素都要調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)。下面的例子給出了一個(gè)錯(cuò)誤的釋放類數(shù)組所占用的內(nèi)存的例子。

              #include iostream.h

              class Date

              {

              int mo, da, yr;

              public:

              Date() { cout < ~Date() { cout< }

              int main()

              {

              Date* dt = new Date[5];

              cout < delete dt; //這兒

              return 0;

              }

              指針dt指向一個(gè)有五個(gè)元素的數(shù)組。按照數(shù)組的定義,編譯器會(huì)讓new運(yùn)算符調(diào)用Date類的構(gòu)造函數(shù)五次。但是delete被調(diào)用時(shí),并沒(méi)有明確告訴編譯器指針指向的Date對(duì)象有幾個(gè),所以編譯時(shí),只會(huì)調(diào)用析構(gòu)函數(shù)一次。下面是程序輸出;

              Date constructor

              Date constructor

              Date constructor

              Date constructor

              Date constructor

              Process the date

              Date destructor

              為了解決這個(gè)問(wèn)題,C++允許告訴delete運(yùn)算符,正在刪除的那個(gè)指針時(shí)指向數(shù)組的,程序修改如下:

              #include iostream.h

              class Date

              {

              int mo, da, yr;

              public:

              Date() { cout < ~Date() { cout< }

              int main()

              {

              Date* dt = new Date[5];

              cout < delete [] dt; //這兒

              return 0;

              }

              最終輸出為:

              Date constructor

              Date constructor

              Date constructor

              Date constructor

              Date constructor

              Process the date

              Date destructor

              Date destructor

              Date destructor

              Date destructor

              Date destructor

              三、重載new和delete運(yùn)算符

              前面已經(jīng)介紹了如何用new和delete運(yùn)算符函數(shù)來(lái)動(dòng)態(tài)第管理內(nèi)存,在那些例子中使用的都是全局的new和delete運(yùn)算符。我們可以重載全局的new和delete運(yùn)算符,但這不是好的想法,除非在進(jìn)行低級(jí)的系統(tǒng)上或者嵌入式的編程。

              但是,在某個(gè)類的內(nèi)部重載new和delete運(yùn)算符時(shí)可以的。這允許一個(gè)類有它自己的new和delete運(yùn)算符。當(dāng)一個(gè)類需要和內(nèi)存打交道時(shí),采用這種方法來(lái)處理其中的細(xì)節(jié),可以獲得很搞的效率,同時(shí)避免了使用全局new和delete運(yùn)算符帶來(lái)的額外開銷。因?yàn)槿侄巡僮鲿r(shí)調(diào)用操作系統(tǒng)函數(shù)來(lái)分配和釋放內(nèi)存,這樣效率很低。

              如果確定某個(gè)類在任何時(shí)候,其實(shí)例都不會(huì)超過(guò)一個(gè)確定的值,那么就可以一次性為類的所有實(shí)例分配足夠的內(nèi)存,然后用該類的new和delete運(yùn)算符來(lái)管理這些內(nèi)存。下面的程序說(shuō)明了如何對(duì)new和delete進(jìn)行重載。

              #include iostream.h

              #include string.h

              #include stddef.h

              #include new.h

              const int maxnames = 5;

              class Names

              {

              char name[25];

              static char Names::pool[];

              static bool Names::inuse[maxnames];

              public:

              Names(char* s) { strncpy(name,s,sizeof(name)); }

              void* operator new(size_t) throw(bad_alloc);

              void operator delete(void*) throw();

              void display() const { cout < };

              char Names::pool[maxnames * sizeof(Names)];

              bool Names::inuse[maxnames];

              void* Names::operator new(size_t) throw(bad_alloc)

              {

              for(int p=0; p {

              if(!inuse[p])

              {

              inuse[p] = true;

              return pool+p*sizeof(Names);

              }

              }

              throw bad_alloc();

              }

              void Names::operator delete(void* p) throw()

              {

              if(p!=0)

              inuse[((char*)p - pool)/sizeof(Names)] = false;

              }

              int main()

              {

              Names* nm[maxnames];

              int i;

              for(i=0; i {

              cout < char name[25];

              cin >> name;

              nm[i] = new Names(name);

              }

              for(i=0; i {

              nm[i]- >display();

              delete nm[i];

              }

              return 0;

              }

              上面的程序提示輸入5個(gè)姓名,然后顯示它們。程序中定義了名為Names的類,它的構(gòu)造函數(shù)初始化對(duì)象的name值。這個(gè)類定義了自己的new和delete運(yùn)算符。這是因?yàn)槌绦蚰鼙WC不會(huì)一次使用超過(guò)maxnames個(gè)姓名,所以可以通過(guò)重載默認(rèn)的new和delete運(yùn)算符來(lái)提高運(yùn)行速度。

              Names類中的內(nèi)存池是一個(gè)字符數(shù)組,可以同時(shí)容納程序需要的所有姓名。與之相關(guān)的布爾型數(shù)組inuse為每個(gè)姓名記錄了一個(gè)true和false值,指出內(nèi)存中的對(duì)應(yīng)的項(xiàng)是否正在使用。

              重載的new運(yùn)算符在內(nèi)存池中尋找一個(gè)沒(méi)有被使用的項(xiàng),然后返回它的地址。重載的delete運(yùn)算符則標(biāo)記那些沒(méi)有被使用的項(xiàng)。

              在類定義中重載的new和delete運(yùn)算符函數(shù)始終是靜態(tài)的,并且沒(méi)有和對(duì)象相關(guān)的this指針。這是因?yàn)榫幾g器會(huì)在調(diào)用構(gòu)造函數(shù)之前調(diào)用new函數(shù),在調(diào)用析構(gòu)函數(shù)后調(diào)用delete函數(shù)。

              new函數(shù)是在類的構(gòu)造函數(shù)之前被調(diào)用的。因?yàn)檫@時(shí)內(nèi)存中還不存在類的對(duì)象而且構(gòu)造函數(shù)也沒(méi)有提供任何初始化值,所以它不可以訪問(wèn)類的任何成員。同理,delete運(yùn)算符是在析構(gòu)函數(shù)之后被調(diào)用的,所以它也不可以訪問(wèn)類的成員。

              四、異常監(jiān)測(cè)和異常處理

              1.檢測(cè)異常

              上面的例子還缺少必要的保護(hù)機(jī)制。比如,重載的delete運(yùn)算符函數(shù)并沒(méi)有檢查它的參數(shù),確認(rèn)其是否落在內(nèi)存池內(nèi)部。如果你絕對(duì)相信自己編的程序中不會(huì)傳遞錯(cuò)誤的指針值給delete運(yùn)算符,那么可以省掉合法性檢查以提高效率,特別是在優(yōu)先考慮效率的程序中。否則應(yīng)該使用預(yù)編譯的條件語(yǔ)句。在軟件的測(cè)試版本中加入這些檢測(cè),在正式的發(fā)行版本中去掉這些檢查。

              2.重載new和delete中的異常處理

              上面的兩個(gè)重載運(yùn)算符函數(shù)都是用了異常處理。異常處理是C++的新內(nèi)容之一,目前還沒(méi)有講到。在這里不必關(guān)心它是如何工作的。上面程序中,當(dāng)試圖分配超過(guò)內(nèi)存池容量的Names緩沖區(qū),重載的new運(yùn)算符函數(shù)就會(huì)拋出異常,終止程序。

              五、重載new[]和delete[]

              對(duì)于上面的程序,假如有下面的語(yǔ)句:

              Names *nms=new Names[10]

              ...

              delete [] nms;

              那么,這些語(yǔ)句會(huì)調(diào)用全局new和delete運(yùn)算符,而不是重載過(guò)的new和delete。為了重載能為對(duì)象數(shù)組分配內(nèi)存的new和delete運(yùn)算符,必須像下面的程序一樣,對(duì)new[]和delete[]也進(jìn)行重載。

              #include iostream.h

              #include string.h

              #include stddef.h

              #include new.h

              const int maxnames = 5;

              class Names

              {

              char name[25];

              static char Names::pool[];

              static bool Names::inuse[maxnames];

              public:

              Names(char* s) { strncpy(name,s,sizeof(name)); }

              void* operator new(size_t) throw(bad_alloc);

              void operator delete(void*) throw();

              void display() const { cout < };

              char Names::pool[maxnames * sizeof(Names)];

              bool Names::inuse[maxnames];

              void* Names::operator new[](size_t size) throw(bad_alloc)

              {

              int elements=size/sizeof(Names);

              int p=-1;

              int i=0;

              while((i {

              if(!inuse[i]) p=i;

              ++i;

              }

              // Not enough room.

              if ((p==-1) || ((maxnames-p) for(int x=0; x return pool+p*sizeof(Names);

              }

              void Names::operator delete[](void* b) throw()

              {

              if(b!=0)

              {

              int p=((char*)b- pool)/sizeof(Names);

              int elements=inuse[p];

              for (int i=0; i }

              }

              int main()

              {

              Names* np = new Names[maxnames];

              int i;

              for(i=0; i {

              cout < char name[25];

              cin >> name;

              *(np + i) = name;

              }

              for(i=0; idisplay();

              delete [] np;

              return 0;

              }

              重載new[]和delete[]要比重載new和delete考慮更多的問(wèn)題。這是因?yàn)閚ew[]運(yùn)算符時(shí)為數(shù)組分配內(nèi)存,所以它必須記住數(shù)組的大小,重載的delete[]運(yùn)算符才能正確地把緩沖區(qū)釋放回內(nèi)存池。上面的程序采用的方法比較簡(jiǎn)單,吧原來(lái)存放緩沖區(qū)使用標(biāo)志的布爾型數(shù)組換成一個(gè)整型數(shù)組,該數(shù)組的每個(gè)元素記錄new[]運(yùn)算符分配的緩沖區(qū)個(gè)數(shù),而不再是一個(gè)簡(jiǎn)單的true。當(dāng)delete[]運(yùn)算符函數(shù)需要把緩沖區(qū)釋放回內(nèi)存池時(shí),它就會(huì)用該數(shù)組來(lái)確認(rèn)釋放的緩沖區(qū)個(gè)數(shù)。

              相關(guān)推薦:

              各地2015年計(jì)算機(jī)等級(jí)考試報(bào)名時(shí)間匯總

              各地2015年上半年計(jì)算機(jī)等級(jí)考試費(fèi)用匯總

              2015年計(jì)算機(jī)二級(jí)C++模擬練習(xí)題及答案匯總

            文章搜索
            版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@eeeigo.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。
            Copyright © 2004- 考試吧計(jì)算機(jī)等級(jí)考試網(wǎng) All Rights Reserved 
            中國(guó)科學(xué)院研究生院權(quán)威支持(北京) 電 話:010-62168566 傳 真:010-62192699