版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C+面向?qū)ο蟪绦蛟O(shè)計教學(xué)內(nèi)容,第1章C+概述第2章類和對象第3章面向?qū)ο蟪绦蛟O(shè)計概述第4章進(jìn)一步學(xué)習(xí)類和對象第5章堆與復(fù)制構(gòu)造函數(shù)第6章繼承性:派生類第7章運算符重載第8章虛函數(shù)和多態(tài)性第9章模板第10章類庫和C+的標(biāo)準(zhǔn)模板庫STL第11章輸入輸出流第12章異常處理,第10章類庫和C+的標(biāo)準(zhǔn)模板庫STL,10.1類庫的概念10.2C+的標(biāo)準(zhǔn)模板庫STL,10.1類庫的概念,1.1.1什么是類庫(classlibrary)?1.1.2如何分析、利用類庫?1.1.3類庫的特點1.1.4類庫是面向?qū)ο蟮能浖_發(fā)環(huán)境的核心,10.1.1什么是類庫?,類庫是類的集合,并且給出了多種類之間的關(guān)系描述。為了
2、便于程序員的開發(fā)工作,系統(tǒng)提供了一批可供重用的代碼。(源程序代碼)具體表現(xiàn)為一組類,通過建立彼此間的繼承關(guān)系形成類庫,以類的形式提供給用戶重用。,什么是類庫?(續(xù)),在設(shè)計和實現(xiàn)面向?qū)ο蟮某绦虻臅r候,要用類和類庫,才能得到所需的對象,即類的實例。所以,類庫是一種預(yù)定義的面向?qū)ο蟮某绦驇臁?類庫的例子,C+StandardSTLlibraryMicrosoftVisualC+系統(tǒng)中提供的MFC類庫。MFCMicrosoftFoundationClassBorlandC+系統(tǒng)中提供的OWL類庫。C+Builder系統(tǒng)中提供的VCL類庫。,類庫為軟件重用提供基礎(chǔ),OOP提供的繼承機(jī)制使得程序員可以在
3、已有類的基礎(chǔ)上定義自己需要的新類,從而實現(xiàn)了軟件模塊的重用。,程序員分工進(jìn)一步細(xì)化,在面向?qū)ο蟮某绦蛟O(shè)計范型之下,程序員的隊伍可能要分為兩種,它們都以類作為工作對象一個隊伍主要是設(shè)計類和類庫,另一個隊伍主要是使用類來設(shè)計應(yīng)用程序。分工細(xì)化就意味著進(jìn)步,10.1.2如何分析、利用類庫?,要想發(fā)揮面向?qū)ο蠓椒ǖ膬?yōu)勢,程序員必須知道類庫的組織情況。我們可以通過聯(lián)機(jī)幫助或類庫參考手冊(類庫工作手冊)了解:軟件開發(fā)系統(tǒng)提供的類庫的類層次結(jié)構(gòu)??赡苄枰玫降念惣捌涓割惖膶傩院头椒?。通過聯(lián)機(jī)文檔提供的例子學(xué)習(xí)有關(guān)類的使用方法。,衡量應(yīng)用程序員能力的標(biāo)準(zhǔn)的變化,結(jié)構(gòu)化程序設(shè)計時代的標(biāo)準(zhǔn):每天編寫的源代碼行數(shù),
4、程序結(jié)構(gòu)清晰。面向?qū)ο蟪绦蛟O(shè)計時代的標(biāo)準(zhǔn):衡量一個應(yīng)用程序員的生產(chǎn)力,要看他是否知道如何來最好地發(fā)揮已有類庫的功能,要看他有沒有能力將已有的類庫與新問題緊密的匹配起來,還要看他不得不另外編寫的代碼是不是最少。,10.1.3類庫有什么特點,通用性可擴(kuò)充性概念性與層次性靈活性,通用性,基于重用的目的,選擇具有廣泛適用性的東西作為類庫的內(nèi)容,并經(jīng)過全面的考慮,使之適用于較多的情況。,可擴(kuò)充性,在軟件開發(fā)過程中,可以添加新的類供以后使用。對已有的類庫進(jìn)行改進(jìn)時,只要保持接口不變,修改不會引起外部(即應(yīng)用系統(tǒng))軟件的變化。,概念性與層次性,類庫中的每個類的概念要明確,易于理解,將具有某些共同性質(zhì)的類作為
5、基類。設(shè)計類要有一個明確的目標(biāo)。一個好的類應(yīng)該是容易理解和使用的。,10.1.4類庫是面向?qū)ο蟮能浖_發(fā)環(huán)境的核心,OOP開發(fā)方法只有基于軟件重用的思想,才能真正提高軟件開發(fā)的效率和質(zhì)量。類庫為軟件重用提供了基礎(chǔ),程序設(shè)計不必再從零開始。類庫不同于傳統(tǒng)的子程序庫(函數(shù)庫),它的性能大大優(yōu)于子程序庫。,10.2C+的標(biāo)準(zhǔn)模板庫STL,10.2.1名字空間namespace簡介10.2.2C+標(biāo)準(zhǔn)庫的構(gòu)成10.2.3標(biāo)準(zhǔn)模板庫STL簡介10.2.4標(biāo)準(zhǔn)模板庫STL應(yīng)用舉例,10.2.1名字空間namespace簡介,日常生活中人名相同引起的名字沖突;C+程序中出現(xiàn)相同的名字引起的沖突:容器類庫中有
6、一個List類窗口類庫中有一個List類如果一個程序中要同時使用這兩個類庫就會發(fā)生名字沖突,名字沖突的危害,在同一個源文件(編譯單元)中出現(xiàn)的名字沖突可以由編譯器compiler檢查出來:RedefinedSymbols(ambiguoussymbol)(參見example10_2)在不同編譯單元(如目標(biāo)文件)之間的名字沖突可能由鏈接器Linker檢查出來:Identifiermultiplydefined也可能導(dǎo)致錯誤鏈接,從而產(chǎn)生運行時錯誤runtimeerror。,名字沖突的原因,C+中采用的是單一的全局名字空間(參見)。在這單一的空間中,如果有兩個類、兩個變量或兩個函數(shù)的名字完全相同,
7、就會出現(xiàn)名字沖突。,作用域的概念scope,局部作用域localscopes:塊作用域函數(shù)作用域文件作用域全局作用域globalscopes全局標(biāo)識符號:全局變量名、全局函數(shù)名、全局類型名等等全局名字在整個程序范圍內(nèi)有效,名字空間namespace,使用名字空間來劃分全局名字空間可以避免名字沖突。解決的辦法就是將程序中相同的名字定義在兩個不同的名字空間中。,名字空間namespace(續(xù)),名字空間就是為解決C+中的變量、函數(shù)等的名字沖突而服務(wù)的。程序規(guī)模越大,名字空間就越有用。Thelargeraprogramis,themoreusefulnamespacesaretoexpresslog
8、space又譯作:命名空間、名稱空間,名字空間的例子,/兩個在不同命名空間中定義的名字相同的變量namespacemyown1stringuser_name=myown1;namespacemyown2stringuser_name=myown2;,名字空間的名字,intmain()coutnHello,myown1:user_name.andgoodbye!n;coutnHello,myown2:user_name.andgoodbye!n;return0;(參見example10_3),用命名空間限制符myown1訪問變量user
9、_name,用命名空間限制符myown2訪問變量user_name,intmain()usingnamespacemyown1;coutnHello,user_name.andgoodbye!n;/usingnamespacemyown2;coutnHello,myown2:user_name.andgoodbye!n;return0;(參見example10_4),用命名空間限制符myown2訪問變量user_name,無需用命名空間限制符myown1訪問變量user_name,創(chuàng)建名字空間,namespacenamespacename/declarationanddefinitions,可
10、見,創(chuàng)建名字空間與定義一個類很相似,實際上類名就是一個名字空間的名字。,usingnamespace,關(guān)鍵字using將一個名字空間變?yōu)榭梢?,實際上只是將該名字空間的名字添加到當(dāng)前名字空間中。命令using的作用域從其聲明之處開始并持續(xù)到當(dāng)前作用域scope結(jié)束。在使用一個名字空間時,并不會覆蓋當(dāng)前的名字空間。,usingnamespace的有效范圍,intmain()usingnamespacemyown1;coutnHello,user_name.andgoodbye!n;usingnamespacemyown2;coutnHello,user_name.andgoodbye!n;retu
11、rn0;,名字空間小結(jié),一、名字空間解決了C+的名字沖突問題二、注意名字空間namespace的書寫格式,和類class相似或相同。三、名字空間名必需是唯一的,否則必需在它們的外面再套上一層名字空間,亦即名字空間可以和類一樣的嵌套使用四、同名類在聲明實例時必需加上名字空間作用域符“名字空間名:類名”五、不一定只有類才可加上名字空間的外套,其它如,局部變量、函數(shù)等都可加上名字空間外套。,10.2.2C+標(biāo)準(zhǔn)庫的構(gòu)成,基本的運行庫例如支持動態(tài)內(nèi)存分配、運行時類型信息RTTIC語言的標(biāo)準(zhǔn)庫標(biāo)準(zhǔn)模板庫(STL)輸入輸出流類庫(I/OStream)和字符串?dāng)?shù)值計算庫例如支持復(fù)數(shù)的計算,C+標(biāo)準(zhǔn)庫名字空間
12、,#includeusingnamespacestd;intmain()std:coutHello,world!n;,C+的標(biāo)準(zhǔn)庫定義在名字空間std之中.,標(biāo)準(zhǔn)庫定義在名字空間std,#include#includeusingnamespacestd;/該編譯指示引入std里的所有符號/使用該編譯指示usingnamespacestd;在C+標(biāo)準(zhǔn)類庫中定義的名字在本程序中可以使用/否則,iostream,string等c+標(biāo)準(zhǔn)類就不可見了,編譯就會出錯。,10.2.3標(biāo)準(zhǔn)模板庫STL簡介,StandardTemplateLibrary(STL)包含常用算法和數(shù)據(jù)結(jié)構(gòu)的通用庫STL的核心內(nèi)容是
13、3個基本組件:容器算法迭代器,STL中的容器類,容器(container)類是用來保存其它對象的,STL中定義了多種不同類型的容器,例如:向量vector線性表list隊列queue映射map集合set字符串string(還有其他容器類,可以參考其他書籍或者查閱聯(lián)機(jī)手冊),常用算法,排序sort()查找find()替換replace()合并merge()反序reverse()統(tǒng)計count()其他等等算法,迭代器(iterator),迭代器是一種類似于指針的對象。可以使用迭代器來訪問容器中的元素,就像我們使用指針來訪問數(shù)組一樣。STL中定義了五種迭代器:隨機(jī)訪問迭代器RandIter雙向迭代器
14、BiIter前向迭代器ForIter輸入迭代器InIter輸出迭代器OutIter,STL的簡單使用方法,在實際的C+面向?qū)ο蟪绦蛟O(shè)計中,STL庫將起著舉足輕重的作用。STL是一個非常龐大、復(fù)雜的類庫目前已經(jīng)有不少專著介紹STL我們通過簡單的實例介紹最基本的應(yīng)用方法,10.2.4標(biāo)準(zhǔn)模板庫STL應(yīng)用舉例,向量vector線性表list隊列queue映射map字符串string,1.向量vector,向量vector類可用來支持動態(tài)數(shù)組,動態(tài)數(shù)組是指可以根據(jù)需要改變大小的數(shù)組??梢院苋菀椎芈暶饕粋€vector類對象,例如:vectoriv;vectorcv(5);vectorcv(5,x);ve
15、ctoriv2(iv);,vector應(yīng)用實例,/Accessavectorusinganiterator.#include#includeusingnamespacestd;intmain()vectorv;/createzero-lengthvectorinti;/putvaluesintoavectorfor(i=0;i10;i+)v.push_back(A+i);,vector應(yīng)用實例(續(xù)),/canaccessvectorcontentsusingsubscriptingfor(i=0;i:iteratorp=v.begin();while(p!=v.end()cout*p;p+;r
16、eturn0;,2.線性表list,線性表list類定義了雙向的線性表,又可稱為雙向鏈表。List類只支持順序訪問。下面的C+程序通過實例化鏈表list類模板建立了一個保存字符的鏈表,接著使用類模板的排序方法sort()進(jìn)行排序,然后輸出經(jīng)過排序后的字符。,線性表list應(yīng)用實例(續(xù)),/Sortalist.#include#include#includeusingnamespacestd;intmain()inti;listlst;/createalistofrandomcharactersfor(i=0;i10;i+)lst.push_back(A+(rand()%26);,線性表list
17、應(yīng)用實例(續(xù)),cout:iteratorp=lst.begin();while(p!=lst.end()cout*p;p+;coutendlendl;/sortthelistlst.sort();,線性表list應(yīng)用實例(續(xù)),coutSortedcontents:;p=lst.begin();while(p!=lst.end()cout*p;p+;return0;,反向迭代器reverseiterator,#include#includeintmain()usingnamespacestd;listc1;list:iteratorc1_Iter;list:reverse_iteratorc
18、1_rIter;c1.push_back(10);c1.push_back(20);c1.push_back(30);,反向迭代器(續(xù)contd.),c1_rIter=c1.rbegin();coutThelastelementinthelistis*c1_rIter.endl;coutThelistis:;for(c1_Iter=c1.begin();c1_Iter!=c1.end();c1_Iter+)cout*c1_Iter;coutendl;,反向迭代器(續(xù)contd.),/rbegincanbeusedtostartaniterationthroughalist/inreverseo
19、rdercoutThereversedlistis:;for(c1_rIter=c1.rbegin();c1_rIter!=c1.rend();c1_rIter+)cout*c1_rIter;coutendl;c1_rIter=c1.rbegin();*c1_rIter=40;coutThelastelementinthelistisnow*c1_rIter.endl;,運行輸出結(jié)果,Thelastelementinthelistis30.Thelistis:102030Thereversedlistis:302010Thelastelementinthelistisnow40.,3.映射ma
20、p,映射map類定義了一個關(guān)聯(lián)容器,并且在容器中使用唯一的關(guān)鍵字來映射相應(yīng)的值。map類對象是一系列關(guān)鍵字值的匹配對。map的功能在于:只要知道了一個值的關(guān)鍵字,就可以找到這個值。下面的實例程序通過實例化標(biāo)準(zhǔn)庫中的map類模板映射建立了一些英文單詞與其反義詞的對應(yīng)關(guān)系,利用這種對應(yīng)系可以迅速查找到一個詞的反義詞。,映射map類應(yīng)用實例,/Amapofwordopposites,usingstrings.#include#include#includeusingnamespacestd;intmain()inti;mapm;m.insert(pair(yes,no);m.insert(pair(
21、up,down);m.insert(pair(left,right);m.insert(pair(good,bad);,映射map類應(yīng)用實例(續(xù)),strings;couts;map:iteratorp;p=m.find(s);if(p!=m.end()coutsecond;elsecoutWordnotinmap.n;return0;,4.隊列queue,隊列(queue)是一個先進(jìn)先出(FIFO:FirstInFirstOut)的數(shù)據(jù)結(jié)構(gòu),在程序設(shè)計中經(jīng)常使用。對一個隊列常用的操作有,在隊列尾增加一個元素、在隊列頭取一個元素以及測試隊列是否為空、是否為滿等操作。,隊列queue的應(yīng)用實例,
22、UsingqueueclassintheStandardC+Library,Instantiateaqueueforstringsanddemonstratethefollowingfunctionsinmain()toshowthatyouknowhowtousethisclass:queue:push()queue:pop()queue:empty()queue:front()queue:back()queue:size(),#include#include#includeusingnamespacestd;voidmain()queuestr_queue;str_queue.push(s
23、tring1);str_queue.push(string2);str_queue.push(string3);,coutthesizeofthequeueis:str_queue.size()endl;coutthefrontonestr_queue.front()endl;coutthebackonestr_queue.back()endl;str_queue.pop();str_queue.pop();str_queue.pop();if(str_queue.empty()coutthequeueisempty!endl;,5.字符串類string,C+提供了兩種處理字符串的方法:以空字
24、符0結(jié)尾的字符數(shù)組容器類string類的對象(標(biāo)準(zhǔn)庫中的string類)使用標(biāo)準(zhǔn)庫中的string類的三個理由:一致性(字符串定義為一種數(shù)據(jù)類型)方便性(可以使用標(biāo)準(zhǔn)的運算符)安全性(不會出現(xiàn)數(shù)組越界錯誤),字符串類string應(yīng)用實例,/Demonstrateinsert(),erase(),andreplace().#include#includeusingnamespacestd;intmain()stringstr1(Thisisatest);stringstr2(ABCDEFG);coutInitialstrings:n;coutstr1:str1endl;coutstr2:str2nn;,字符串類string應(yīng)用實例(續(xù)),/demonstrateinsert()coutInsertstr2intostr1:n;str1.insert(5,str2);coutstr1nn;/demonstrateerase()coutRemove7charactersfromstr1:n;str1.erase(5,7);coutstr1nn;,字符串類string應(yīng)用實例(續(xù)),/demonstratereplacecoutReplace2charactersinstr1withstr2:n;str1.repla
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026廈門銀行三明分行社會招聘考試參考試題及答案解析
- 2026湖北武漢市華中農(nóng)業(yè)大學(xué)韓文元課題組誠聘博士后筆試模擬試題及答案解析
- 2026云南怒江州貢山縣醫(yī)療保障局選聘醫(yī)療保障義務(wù)社會監(jiān)督員10人考試備考題庫及答案解析
- 2026廣西崇左市江州區(qū)消防救援大隊招聘財務(wù)會計1人考試備考題庫及答案解析
- 2026廣東清遠(yuǎn)市佛岡縣石角鎮(zhèn)招聘專職消防安全監(jiān)管員2人考試備考題庫及答案解析
- 2026內(nèi)蒙古民族大學(xué)招聘銀齡教師17人考試參考題庫及答案解析
- 2026安徽消防中控員考試參考試題及答案解析
- 2026年溫醫(yī)大眼視光干細(xì)胞生物醫(yī)學(xué)與生物材料工程研究組招聘備考題庫及1套完整答案詳解
- 南京古生物所非在編項目聘用人員(勞務(wù)派遣)招聘備考題庫(2025年第18期)及參考答案詳解一套
- 中國支付清算協(xié)會2026年度公開招聘備考題庫含答案詳解
- 2626《藥事管理與法規(guī)》國家開放大學(xué)期末考試題庫
- 合資船舶合同范本
- 2025年云南昆明巫家壩建設(shè)發(fā)展有限責(zé)任公司及下屬公司第四季度社會招聘31人筆試參考題庫附帶答案詳解(3卷)
- 2026年湖南化工職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試題庫含答案詳解
- 食材配送公司管理制度(3篇)
- 供銷合同示范文本
- 2024年供應(yīng)鏈運營1+X職業(yè)技能等級證書中級考試(含答案解析)
- 《分布式光伏發(fā)電開發(fā)建設(shè)管理辦法》問答(2025年版)
- 國家金融監(jiān)督管理總局真題面試題及答案
- 大型商場顧客滿意度調(diào)查報告
- 落地式腳手架拆除安全專項施工方案
評論
0/150
提交評論