




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++Overview潘愛(ài)民panaimin@/CompCourse/內(nèi)容簡(jiǎn)介C++語(yǔ)言基礎(chǔ)Object-BasedProgrammingObject-OrientedProgrammingSTLC++之我見(jiàn)C++語(yǔ)言在變化,我們的概念也要調(diào)整變化最能反映OO思想的語(yǔ)言,掌握C++有助于理解OO區(qū)分C和C++,C++不是C語(yǔ)言,不要用看待C語(yǔ)言的方式來(lái)看待C++掌握C++語(yǔ)言的基礎(chǔ)知識(shí)操作系統(tǒng)的基礎(chǔ)知識(shí)文件API、內(nèi)存管理…infrastructures計(jì)算機(jī)原理匯編語(yǔ)言C/C++是產(chǎn)生ASM代碼的framework編譯和執(zhí)行過(guò)程編譯過(guò)程執(zhí)行過(guò)程許多概念進(jìn)程、heap、stack,...程序開(kāi)發(fā)過(guò)程開(kāi)發(fā)編輯編譯出錯(cuò)?鏈接執(zhí)行結(jié)果正確?結(jié)束源程序file.cpp目標(biāo)程序file.obj庫(kù)函數(shù)和其它OBJ可執(zhí)行程序file.exeYesYesNoNoBuild過(guò)程:compiletimeCompile+link如何對(duì)待錯(cuò)誤和警告錯(cuò)誤:一定要排除,從第一個(gè)錯(cuò)誤找起警告:或者排除,或者確實(shí)理解不會(huì)對(duì)程序造成危害學(xué)會(huì)設(shè)置compileoptions和linkoptionsIDE中如何設(shè)置?——一定要知道!命令行如何設(shè)置?程序代碼中如何設(shè)置?執(zhí)行過(guò)程:runtimeLoad、重定位、初始化、main如何調(diào)試斷點(diǎn)assertion程序?qū)Νh(huán)境的依賴性系統(tǒng)環(huán)境CRT內(nèi)存影像C++語(yǔ)言內(nèi)容數(shù)據(jù)類型內(nèi)置(built-in)、標(biāo)準(zhǔn)庫(kù)、自定義的表達(dá)式控制語(yǔ)句函數(shù)(模板)異常處理函數(shù)模板例子:template<classType>Typemin(Typea,Typeb){ returna<b?a:b;}min(10,20);min(10.0,20.0);模板實(shí)例化——由參數(shù)決定隱式實(shí)例化顯式實(shí)例化min<int>(10,20);函數(shù)模板(續(xù))兩種編譯模式:inclusion模式separation模式(export關(guān)鍵字)模板特化重載函數(shù)模板異常處理(exceptionhandling)錯(cuò)誤處理機(jī)制、錯(cuò)誤代碼隔離Throw(raise)anexceptionThrowexpression類似于return語(yǔ)句Try、catch語(yǔ)句(handler)try{}catch(type){}或catch(typeobj){}類似于函數(shù)調(diào)用但是類型匹配發(fā)生在runtime異常處理(續(xù))嵌套機(jī)制,如果最外層沒(méi)有處理,則由terminate來(lái)處理Localobject正常析構(gòu)rethrow在catch子句中仍然可以throwCatchallhandlercatch(…)聲明函數(shù)時(shí)指定函數(shù)可能的異常intfunc(int)throw(string);如果沒(méi)有指定的異常發(fā)生,調(diào)用unexpected()Object-BasedProgrammingclass實(shí)現(xiàn)數(shù)據(jù)封裝對(duì)象構(gòu)造函數(shù)與析構(gòu)函數(shù)訪問(wèn)控制、友元嵌套類類中成員初始化虛擬函數(shù)類中運(yùn)算符重載類模板this指針在類的內(nèi)部指向類自身的指針在每個(gè)成員函數(shù)中,this指針提供了使用上的方便this指針把類的多個(gè)實(shí)例對(duì)象區(qū)分開(kāi)來(lái)模板函數(shù)模板
即以數(shù)據(jù)類型為“參數(shù)”的函數(shù)例如:
template<classT>Swap( T&a,T&b){Ttemp;temp=a;a=b;b=temp;}類模板(模板類或類生成器)
即以數(shù)據(jù)類型為“參數(shù)”的類例如:
template<classT>classStack{private:Tpool[maxNum];
intsp;public:Stack();voidPush(Tx);TPop();BOOLIsEmpty()const;BOOLIsFull()const;};
使用:
Stack<int>intStack;Stack<float>floatStack;模板(續(xù))定義模板實(shí)例化模板參數(shù):類型參數(shù)、非類型參數(shù)兩種編譯模式:inclusion模式separation模式(export關(guān)鍵字)類模板特化(classtemplatespecializations)類模板部分特化(classtemplatepartialspecializations)從面向過(guò)程轉(zhuǎn)換到面向?qū)ο竺嫦蜻^(guò)程以功能為組織單元在C語(yǔ)言中以函數(shù)作為功能單元;通過(guò)數(shù)據(jù)結(jié)構(gòu)來(lái)描述具體的問(wèn)題;數(shù)據(jù)在功能(函數(shù))之間以參數(shù)的形式被傳送。
面向?qū)ο笥妙恈lass封裝數(shù)據(jù)以及與數(shù)據(jù)相關(guān)的操作;用類的繼承性來(lái)實(shí)現(xiàn)類的重用性;多態(tài)性。Object-OrientedProgrammingCShapeCPointCLineCCircleCArcCTextCShapeCPointCLineCCircleCArcCText多態(tài)性和虛擬函數(shù)多態(tài)性是面向?qū)ο蟮囊粋€(gè)支柱
允許程序在實(shí)施對(duì)象的操作時(shí),允許對(duì)象按不同的方式完成不同類型對(duì)象的操作;不同類型對(duì)象有自己實(shí)現(xiàn)操作的方法。虛擬函數(shù)虛擬函數(shù)實(shí)現(xiàn)了多態(tài)性。說(shuō)明:在函數(shù)說(shuō)明之前加上關(guān)鍵字virtual在基類的說(shuō)明中,定義虛擬函數(shù):
virtualvoidDisplay();調(diào)用:
CShape*pShape=GetCurrentShape();
pShape->Display();對(duì)象的內(nèi)存分布圖Vptr指針和vtab表classA{private:
intvalue;public:virtualvoidFunc1(void)virtualvoidFunc2(void)};變量偏移量vptr0value4A::Func1A::Func2vtab對(duì)象的內(nèi)存分布圖(續(xù)一)classB:pulicA{private:
intvalue1;public:virtualvoidFunc1(void)virtualvoidFunc2(void)};變量偏移量vptr0value4value18B::Func1B::Func2vtab對(duì)象的內(nèi)存分布圖(續(xù)二)classB:pulicA{private:
intvalue1;public:virtualvoidFunc1(void)};變量偏移量vptr0value4value18B::Func1A::Func2vtab繼承關(guān)系Public繼承“is-a”關(guān)系private繼承“has-a”關(guān)系可以用復(fù)合類或者嵌套類來(lái)表示protected繼承比private繼承放寬限制virtual繼承單個(gè)共享實(shí)例虛基類的構(gòu)造由themostderivedclass完成類型轉(zhuǎn)換Static_castDynamic_cast向下轉(zhuǎn)換voidDraw(CShape*shape){ //shape->DrawRect() //shape->DrawCircle() if(dynamic_cast<CRect*>(shape)){…}}RTTI:typeidStatic_cast類型轉(zhuǎn)換classB{...};classD:publicB{...};voidf(B*pb,D*pd){D*pd2=static_cast<D*>(pb);//notsafe,pbmay//pointtojustBB*pb2=static_cast<B*>(pd);//safeconversion...}Static_cast類型轉(zhuǎn)換(續(xù))classB{...};classD:publicB{...};voidf(B*pb){D*pd1=dynamic_cast<D*>(pb);D*pd2=static_cast<D*>(pb);}C++標(biāo)準(zhǔn)庫(kù)C標(biāo)準(zhǔn)庫(kù)iostreamlibrarycin、cout、cerrostream&operator<<(ostream&os,constMyClass)istream&operator>>(istream&os,MyClass&)STL(StandardTemplateLibrary)GenericProgramming作者:AlexanderStepanov目標(biāo):高效、靈活地實(shí)現(xiàn)各種算法思想:對(duì)算法進(jìn)行抽象,與數(shù)據(jù)表示分開(kāi)以模板技術(shù)為基礎(chǔ)函數(shù)模板類模板C++的發(fā)展使得這種思想得以實(shí)現(xiàn)STL基礎(chǔ)Object-BasedProgramming有關(guān)class的各種設(shè)計(jì)技術(shù)函數(shù)對(duì)象(functionobjects)重載了函數(shù)調(diào)用操作符()的類模板函數(shù)模板類模板模板特化STL思想數(shù)據(jù)類型算法容器STL實(shí)現(xiàn)Iterator對(duì)象容器(Container)算法(Algorithm)Iterator對(duì)象Iterator對(duì)象STL容器順序容器(SequenceContainer)vectordequelist關(guān)聯(lián)容器(AssociativeContainer)setmultisetmapmultisetSTL迭代器迭代器(Iterator)是指針(pointer)的泛化任意訪問(wèn)雙向迭代器向前迭代器輸入迭代器輸出迭代器STL算法改變順序的操作reverse、replace不改變順序的操作for_each、find排序及相關(guān)操作sort、rotate常用的數(shù)字操作count、sum_up使用STL#include<functional>#include<list>#include<iostream>#include<algorithm>usingnamespacestd;template<typenameT>voidprint_elements(Telem){cout<<elem<<"";}void(*pfi)(int)=print_elements;voidmain(){
intia[7]={0,1,2,3,4,5,6}; list<int>ilist(ia,ia+7); //以陣列做為list的初值 for_each(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 虛擬時(shí)尚搭配直播教學(xué)考核試卷
- 服務(wù)流程標(biāo)準(zhǔn)化客戶溝通規(guī)范考核試卷
- 虛擬時(shí)尚產(chǎn)品設(shè)計(jì)趨勢(shì)考核試卷
- 健康與心血管疾病康復(fù)咨詢考核試卷
- 價(jià)值投資在資產(chǎn)配置中的定位考核試卷
- 節(jié)能環(huán)保優(yōu)勢(shì)考核試卷
- 水產(chǎn)養(yǎng)殖品種養(yǎng)殖密度與生長(zhǎng)性能關(guān)系考核試卷
- 心理治療輔助反饋系統(tǒng)考核試卷
- 2025年中國(guó)PVC勞防用品數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025年中國(guó)GPS便攜機(jī)數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025年育嬰師職業(yè)資格考試試題及答案
- 2023年三種人試題附答案
- 北京市八十中學(xué)2025屆八年級(jí)英語(yǔ)第二學(xué)期期中經(jīng)典試題含答案
- 2024年 金澤鎮(zhèn)專職村務(wù)工作者招錄考試真題試題含答案
- 哇哈哈品牌管理制度
- 2025年內(nèi)蒙古自治區(qū)包頭市東河區(qū)第二中學(xué)英語(yǔ)八年級(jí)第二學(xué)期期末復(fù)習(xí)檢測(cè)模擬試題含答案
- 2025年四川省達(dá)州市中考英語(yǔ)真題(原卷版)
- 2024年證券市場(chǎng)基本法律法規(guī)真題及答案
- 湖南省2025年高考公安院校公安專業(yè)考生檔案審核表
- 2025年第十屆“學(xué)憲法、講憲法”網(wǎng)絡(luò)知識(shí)競(jìng)賽題庫(kù)(含答案)
- 歷史●湖北卷丨2021年湖北省普通高中學(xué)業(yè)水平選擇性考試歷史試卷及答案
評(píng)論
0/150
提交評(píng)論