com組件C語言基礎(chǔ)_第1頁
com組件C語言基礎(chǔ)_第2頁
com組件C語言基礎(chǔ)_第3頁
com組件C語言基礎(chǔ)_第4頁
com組件C語言基礎(chǔ)_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C++Overview潘愛民panaimin@/CompCourse/內(nèi)容簡介C++語言基礎(chǔ)Object-BasedProgrammingObject-OrientedProgrammingSTLC++之我見C++語言在變化,我們的概念也要調(diào)整變化最能反映OO思想的語言,掌握C++有助于理解OO區(qū)分C和C++,C++不是C語言,不要用看待C語言的方式來看待C++掌握C++語言的基礎(chǔ)知識操作系統(tǒng)的基礎(chǔ)知識文件API、內(nèi)存管理…infrastructures計算機(jī)原理匯編語言C/C++是產(chǎn)生ASM代碼的framework編譯和執(zhí)行過程編譯過程執(zhí)行過程許多概念進(jìn)程、heap、stack,...程序開發(fā)過程開發(fā)編輯編譯出錯?鏈接執(zhí)行結(jié)果正確?結(jié)束源程序file.cpp目標(biāo)程序file.obj庫函數(shù)和其它OBJ可執(zhí)行程序file.exeYesYesNoNoBuild過程:compiletimeCompile+link如何對待錯誤和警告錯誤:一定要排除,從第一個錯誤找起警告:或者排除,或者確實理解不會對程序造成危害學(xué)會設(shè)置compileoptions和linkoptionsIDE中如何設(shè)置?——一定要知道!命令行如何設(shè)置?程序代碼中如何設(shè)置?執(zhí)行過程:runtimeLoad、重定位、初始化、main如何調(diào)試斷點assertion程序?qū)Νh(huán)境的依賴性系統(tǒng)環(huán)境CRT內(nèi)存影像C++語言內(nèi)容數(shù)據(jù)類型內(nèi)置(built-in)、標(biāo)準(zhǔn)庫、自定義的表達(dá)式控制語句函數(shù)(模板)異常處理函數(shù)模板例子:template<classType>Typemin(Typea,Typeb){ returna<b?a:b;}min(10,20);min(10.0,20.0);模板實例化——由參數(shù)決定隱式實例化顯式實例化min<int>(10,20);函數(shù)模板(續(xù))兩種編譯模式:inclusion模式separation模式(export關(guān)鍵字)模板特化重載函數(shù)模板異常處理(exceptionhandling)錯誤處理機(jī)制、錯誤代碼隔離Throw(raise)anexceptionThrowexpression類似于return語句Try、catch語句(handler)try{}catch(type){}或catch(typeobj){}類似于函數(shù)調(diào)用但是類型匹配發(fā)生在runtime異常處理(續(xù))嵌套機(jī)制,如果最外層沒有處理,則由terminate來處理Localobject正常析構(gòu)rethrow在catch子句中仍然可以throwCatchallhandlercatch(…)聲明函數(shù)時指定函數(shù)可能的異常intfunc(int)throw(string);如果沒有指定的異常發(fā)生,調(diào)用unexpected()Object-BasedProgrammingclass實現(xiàn)數(shù)據(jù)封裝對象構(gòu)造函數(shù)與析構(gòu)函數(shù)訪問控制、友元嵌套類類中成員初始化虛擬函數(shù)類中運(yùn)算符重載類模板this指針在類的內(nèi)部指向類自身的指針在每個成員函數(shù)中,this指針提供了使用上的方便this指針把類的多個實例對象區(qū)分開來模板函數(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ù)兩種編譯模式:inclusion模式separation模式(export關(guān)鍵字)類模板特化(classtemplatespecializations)類模板部分特化(classtemplatepartialspecializations)從面向過程轉(zhuǎn)換到面向?qū)ο竺嫦蜻^程以功能為組織單元在C語言中以函數(shù)作為功能單元;通過數(shù)據(jù)結(jié)構(gòu)來描述具體的問題;數(shù)據(jù)在功能(函數(shù))之間以參數(shù)的形式被傳送。

面向?qū)ο笥妙恈lass封裝數(shù)據(jù)以及與數(shù)據(jù)相關(guān)的操作;用類的繼承性來實現(xiàn)類的重用性;多態(tài)性。Object-OrientedProgrammingCShapeCPointCLineCCircleCArcCTextCShapeCPointCLineCCircleCArcCText多態(tài)性和虛擬函數(shù)多態(tài)性是面向?qū)ο蟮囊粋€支柱

允許程序在實施對象的操作時,允許對象按不同的方式完成不同類型對象的操作;不同類型對象有自己實現(xiàn)操作的方法。虛擬函數(shù)虛擬函數(shù)實現(xiàn)了多態(tài)性。說明:在函數(shù)說明之前加上關(guān)鍵字virtual在基類的說明中,定義虛擬函數(shù):

virtualvoidDisplay();調(diào)用:

CShape*pShape=GetCurrentShape();

pShape->Display();對象的內(nèi)存分布圖Vptr指針和vtab表classA{private:

intvalue;public:virtualvoidFunc1(void)virtualvoidFunc2(void)};變量偏移量vptr0value4A::Func1A::Func2vtab對象的內(nèi)存分布圖(續(xù)一)classB:pulicA{private:

intvalue1;public:virtualvoidFunc1(void)virtualvoidFunc2(void)};變量偏移量vptr0value4value18B::Func1B::Func2vtab對象的內(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ù)合類或者嵌套類來表示protected繼承比private繼承放寬限制virtual繼承單個共享實例虛基類的構(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)庫C標(biāo)準(zhǔn)庫iostreamlibrarycin、cout、cerrostream&operator<<(ostream&os,constMyClass)istream&operator>>(istream&os,MyClass&)STL(StandardTemplateLibrary)GenericProgramming作者:AlexanderStepanov目標(biāo):高效、靈活地實現(xiàn)各種算法思想:對算法進(jìn)行抽象,與數(shù)據(jù)表示分開以模板技術(shù)為基礎(chǔ)函數(shù)模板類模板C++的發(fā)展使得這種思想得以實現(xiàn)STL基礎(chǔ)Object-BasedProgramming有關(guān)class的各種設(shè)計技術(shù)函數(shù)對象(functionobjects)重載了函數(shù)調(diào)用操作符()的類模板函數(shù)模板類模板模板特化STL思想數(shù)據(jù)類型算法容器STL實現(xiàn)Iterator對象容器(Container)算法(Algorithm)Iterator對象Iterator對象STL容器順序容器(SequenceContainer)vectordequelist關(guān)聯(lián)容器(AssociativeContainer)setmultisetmapmultisetSTL迭代器迭代器(Iterator)是指針(pointer)的泛化任意訪問雙向迭代器向前迭代器輸入迭代器輸出迭代器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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論