華為C++中級培訓ppt課件_第1頁
華為C++中級培訓ppt課件_第2頁
華為C++中級培訓ppt課件_第3頁
華為C++中級培訓ppt課件_第4頁
華為C++中級培訓ppt課件_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、華為C+中級培訓員工培訓中心2005年7月1日課程內(nèi)容第一章: 類第二章:接 口第三章:運算符重載第四章:模 板第一章: 類根本概念類的根本特性類的運用的特例根本概念 namespace Class names Class membersMember FunctionsStatic Member FunctionsUnionsC+ Bit FieldsNested Class DeclarationsType Names in Class ScopeMultiple Base ClassesVirtual FunctionsAbstract ClassesControlling Access

2、to Class Membersprivate Membersprotected Memberspublic MembersAccess Specifiers for Base Classes,priavte,public、protectedFriends ConstructorsDestructorsConversion Functionsthe new operator and the delete operatorCopying Constructor FunctionsInterface類的根本特性構(gòu)造函數(shù)與拷貝構(gòu)造函數(shù)靜態(tài)成員與友元組合與承繼構(gòu)造函數(shù)與拷貝構(gòu)造函數(shù)C+規(guī)定與類同名的函

3、數(shù)就是拷貝構(gòu)造函數(shù)默許拷貝構(gòu)造函數(shù)在類定義中假設沒有提供本人的拷貝構(gòu)造函數(shù),那么C+提供一個默許的構(gòu)造函數(shù),其拷貝戰(zhàn)略是逐個成員依次拷貝。深拷貝和淺拷貝默許拷貝構(gòu)造函數(shù)均是淺拷貝但是一個類能夠擁有其它資源,如其構(gòu)造函數(shù)分配了一個堆內(nèi)存,析構(gòu)函數(shù)釋放了這個內(nèi)存,那么此時就需求進展深拷貝了深拷貝不能依賴編譯器實現(xiàn)靜態(tài)成員與友元靜態(tài)成員運用static 聲明,在內(nèi)存中永遠只需一份實例是類的對象所共有的靜態(tài)成員變量可以被成員函數(shù)訪問,但靜態(tài)成員函數(shù)只能訪問靜態(tài)成員變量友元是為了一個普通函數(shù)直接訪問一個類的維護甚至是私有成員的機制組合與承繼C + +最重要的性能之一是代碼重用簡單地創(chuàng)建一個包含已存在的類

4、對象的新類,這稱為組合,has-a 關系創(chuàng)建一個新類作為一個已存在類的類型,采取這個已存在類的方式,對它添加代碼,但不修正它。稱為承繼,具有is-a關系,承繼具有單一承繼和多承繼類的運用的特例承繼中的向上映射與切片問題多承繼中發(fā)生的菱形缺陷this跳轉(zhuǎn)承繼中的向上映射與切片問題假設有 class B:public A;B b;A a = b;這就是切片景象而B *pb = new B;A *pa = pb;那么不會發(fā)生切片,由于這只是指針的賦值而不涉及到切片景象多承繼中發(fā)生的菱形缺陷菱形缺陷導致的緣由:發(fā)生了菱形承繼,如右圖兩個缺陷:子對象重疊向上映射的二義性 處理方法:修正多承繼關系為單一承

5、繼關系或者是組合關系進展虛承繼this跳轉(zhuǎn)如右圖承繼關系對于一個曾經(jīng)實例化B類的對象 bObject,永遠有B*&bObject =(A*)&bObject 成立 但是在多承繼的世界內(nèi),上面的等式就不能恒成立,對象的同一性遭到了挑戰(zhàn)。特別的是,在多承繼世界內(nèi)假設左下的菱形關系存在情況下,假設對于曾經(jīng)實例化B類的對象bObject; Base*A1*&bObject != Base*A2*&bObject 成立,當這種事情發(fā)生的時候我們就只能特殊處置了。這種情況在COM運用中處處都會發(fā)生 。 第二章:接 口根本知識根本特性接口運用的特例運用舉例根本概念ClassVirtual functions

6、Pure virtual functionsAbstract classStruct & Interface根本特性虛函數(shù)純虛函數(shù)籠統(tǒng)類接口虛函數(shù)語法特性虛析構(gòu)函數(shù)語法在普通成員函數(shù)前面加 virtual 關鍵字一個函數(shù)在基類聲明一個virtual,那么在一切的派生類都是是virtual的一個函數(shù)在基類為普通函數(shù),在派生類定義為virtual的函數(shù)稱為越位特性實施晚期綁定即運轉(zhuǎn)時辰綁定,實施多態(tài)的一種方法具有虛函數(shù)類的虛函數(shù)表的規(guī)劃如下:classvtprclass:m1class:m2純虛函數(shù)語法:成員函數(shù)前面加 virtual 關鍵在,在函數(shù)聲明的)后標注 “ = 0 關鍵字在聲明純虛函數(shù)

7、類中不能實現(xiàn)該函數(shù)籠統(tǒng)類具有純虛函數(shù)的類就是籠統(tǒng)類籠統(tǒng)類不能被實例化,所以籠統(tǒng)類只能以指針方式被運用籠統(tǒng)類可以防止切片的發(fā)生籠統(tǒng)類不產(chǎn)生虛表。用戶接口接口的演化與接口的必要性接口運用特例接口運用例如接口的演化與接口的必要性Handle-Body 方式籠統(tǒng)接口classHandlem_pThisclassclassvtprclass:m1class:m2接口運用特例多重接口與方法名沖突問題Siamese twins提出問題:假設汽車最大速度的接口為ICar,潛艇最大速度的接口為 IBoat,有一個兩棲類的交通工具它可以奔跑在馬路上,也可以航行在大海中,那么它就同時擁有ICar、IBoat兩種交通

8、工具的最大速度特性,我們定義它的接口為ICarBoat;處理問題采用中間類的處理方法內(nèi)嵌內(nèi)的處理方法留給大家思索采用中間類的處理方法接口運用例如籠統(tǒng)工廠第二章:運算符重載根本概念可重載和不可重載幾類特殊的運算符重載運算符重載的運用根本概念Overloaded FunctionsOverloaded OperatorsDeclaration MatchingArgument MatchingArgument Types MatchingArgument Counts MatchingC+ Unary OperatorsBinary OperatorsSmart Pointer Function

9、Objects可重載和不可重載可重載運算符+ */ % &| ! = +=*= /= %= = &= |= = = = != = & | + *, () new new delete delete不可重載運算符. .* : ? : # # / /* */特殊的運算符重載一運算符 下標運算符 必需是成員函數(shù)并且它需求單個參數(shù)。由于它暗示對象像數(shù)組一樣動作,可以經(jīng)常從這個運算符前往一個援用,所以它可以被很方便地用于等號左側(cè)。這個運算符經(jīng)常被重載運算符n e w和d e l e t e控制動態(tài)內(nèi)存分配,當創(chuàng)建一個n e w表達式時有兩件事發(fā)生。首先,運用運算符n e w分配內(nèi)存,然后調(diào)用構(gòu)造函數(shù)。在

10、d e l e t e表達式里,調(diào)用析構(gòu)函數(shù),然后運用運算符d e l e t e釋放內(nèi)存。我們永遠無法控制構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用否那么我們能夠不測地攪亂它們,但可以改動內(nèi)存分配算法n e w和d e l e t e特殊的運算符重載二逗號運算符當逗號出如今逗號運算對象左右時,逗號運算符被調(diào)用。然而,逗號運算符在函數(shù)參數(shù)表中出現(xiàn)時不被調(diào)用重點引見的運算符轉(zhuǎn)換運算符運算符&地址運算符-運算符( )轉(zhuǎn)換運算符轉(zhuǎn)換函數(shù)稱號operator 轉(zhuǎn)換數(shù)據(jù)類型名,如 MFC 中的operator LPCSTR作用經(jīng)過在關鍵字operator后跟隨想要轉(zhuǎn)換到的類型的方法,將當前類型轉(zhuǎn)換為希望的類型構(gòu)造轉(zhuǎn)換&運

11、算符轉(zhuǎn)換用構(gòu)造函數(shù)技術(shù),目的類執(zhí)行轉(zhuǎn)換。然而運用運算符技術(shù),是源類執(zhí)行轉(zhuǎn)換構(gòu)造函數(shù)技術(shù)的價值是在創(chuàng)建一個新類時為現(xiàn)有系統(tǒng)添加了新的轉(zhuǎn)換途徑。然而,創(chuàng)建一個單一參數(shù)的構(gòu)造函數(shù)總是定義一個自動類型轉(zhuǎn)換即使它有不止一個參數(shù)也是一樣,由于其他的參數(shù)將被缺省處置,這能夠并不是我們所想要的。另外,運用構(gòu)造函數(shù)技術(shù)沒有方法實現(xiàn)從用戶定義類型向內(nèi)置類型轉(zhuǎn)換,這只需運算符重載能夠做到。運算符&運用:規(guī)范模板庫中的std:auto_ptrCOM中的CComPtr重載缺陷:地址是一個對象的及其根本的特性,假設某類型重載 & 運算符,該類型將無法參與泛型編程對于smart ptr 實施的&運算,意味著完全放棄了對擁有

12、權(quán)的自動管理。當客戶直接訪問原生對象的時候,smart ptr 將失去它的輔助作用效應運算符-Operator- 機制當他對某一型別實施operator-,而該型別并非原生指針時,編譯器會繼續(xù)對執(zhí)行的結(jié)果實施operator-,直到得到一個原生指針作用Smart Pointer的運用可以對對象的成員函數(shù)實施“前調(diào)用及“后調(diào)用 (pre- and post- function calls)運算符( )functors or function objects特點聲明象對象實踐上也是對象,調(diào)用象函數(shù)運用廣泛運用于STL的各種算法,實施函數(shù)配接運算符重載的運用智能指針仿函數(shù)智能指針關鍵點重載“-運算符

13、的對象作用在多線程編程中自動進展加解鎖操作自動實施對象援用銜接計數(shù),進展對象的生命周期管理仿函數(shù)關鍵點重載“()運算符作用主要用于函數(shù)配接,參數(shù)配接,廣泛運用于STL第三章:模 板根本概念根本語法模板設計中的非習慣性思想模板設計的根本方法方法設計例如-STL規(guī)范模板庫模板的佳作根本概念typenameFunction Templates Class Templates STL(Standard Template Library)functors、function adpterscontainers、iterator、traits、vector、list、deque、stack、queue、he

14、ap、set、map、hashtable、RB-treestlport、boost、loki根本語法template declaration這個template描畫了一個參數(shù)化的類模板類或者是一個參數(shù)化的函數(shù)模板函數(shù),這個模板參數(shù)列表是用逗號分隔的類型列表在這個表單忠運用 class 或者是 typename 來標識這個數(shù)據(jù)類型。在某些情況下這個模板體內(nèi)能夠不存在任何的數(shù)據(jù)類型。declaration 域必需是一個函數(shù)或者類的聲明 模板設計中的非習慣性思想聲明并不一定要定義定義類不一定要有成員、成員不僅僅是方法和成員變量定義類不一定要有成員成員不僅是方法和成員變量class EmptyType

15、;templatestruct iterator_traitstypedef typename I:iterator_category iterator_categorytypedef typename I:value_type value_type;typedef typename I:difference_type differnce_type;typedef typename I:pointer pointer;typedef typename I:refrence refrence;Template struct int2type enum value = v ;聲明并不一定要定義聲明

16、一個函數(shù),并不定義制止某種缺省函數(shù)的調(diào)用聲明一個函數(shù)而不實現(xiàn)能夠是為了模板函數(shù)的泛化聲明一個函數(shù)能夠僅僅為了獲得特殊某一項功能聲明一個類而不實現(xiàn)制止模板類的泛化,只允許特化實施編譯某項功能的檢測如:編譯時辰斷言模板設計的根本方法編譯器斷言模板特化部分類常數(shù)映射型別型別映射型別型別選擇Null class or null function 和 Empty classType Traits模板嵌套Policy class利用模板設計的方法解題編譯時辰測試類型的可轉(zhuǎn)換性用到的技術(shù):只定義不實現(xiàn)函數(shù)多態(tài)性可變參函數(shù)sizeoftemplatetypedef char small; class big

17、char dummy2;static small test(U);只定義不實現(xiàn)static big test();static T markT();/函數(shù)定義只是為了得到一個前往類型public;enum value = sizeof(test(makT()= sizeof(Small) ;STL規(guī)范模板庫容器迭代器算法仿函數(shù)配接器容器序列容器vector,list、deque、stack(沒有迭代器)、queue(沒有迭代器)、即stack、queue不允許遍歷行為關聯(lián)容器set(規(guī)范)、map(規(guī)范)、hash_table、 RB-tree通用算法begin()、end()、size()、

18、empty()、erase(iterator _position)、clear()迭代器迭代器的根本算法迭代器型別型別萃取迭代器的根本算法可以進展+、+、-、+=、=、= = 、!=等運算是一種智能性指針,實現(xiàn)operator * operator -的重載根據(jù)迭代器的特點,迭代器又稱循環(huán)子迭代器前閉后開區(qū)間 first, last)型別 單向迭代器可逆迭代器隨機迭代器 迭代器的承繼關系:型別萃取型別value_typedifference_typerefrence_typepointer_typeiterator_category型別萃取機iterator_traits算法數(shù)值運算power

19、、itoa、accumulate根本運算fill、fill_n、swap、max、min、iter_swap、copy集合運算set_union、set_interseion、set_diffrence數(shù)據(jù)整理(以循環(huán)子為參數(shù))count、count_if、find、find_if、for_each、merge、sort、upper、search、search_n仿函數(shù)一元仿函數(shù)二元仿函數(shù)二元化一元仿函數(shù)仿函數(shù)運用一元仿函數(shù)template struct unary_function typedef _Arg argument_type; typedef _Result result_type

20、;templatestruct negate:public unary_function_Tp operator()(const T&x) const return x;:二元仿函數(shù)template struct less : public binary_function bool operator()(const _Tp& _x, const _Tp& _y) const return _x _y; ;二元化一元仿函數(shù)Class binder1st binder1st(const Operation &op, const T1 &y); operator()(const T2 &x);仿函數(shù)運用template inline _InputIter _find_if(_InputIter _first, _InputIter _last, Operation _op, const input_iterator_tag &) while (_first != _last & !_op(*_first) +_first; return _first;配接器容器配接器stackQueue迭代配接器Reverse IteratorsIOStream IteratorsInert_Iterator仿函數(shù)配接器容器配接器容器配接器Stacktemplate class _Tp, clas

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論