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

下載本文檔

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

文檔簡介

1、華為C+中級培訓員工培訓中心2005年7月1日課程內容第一章: 類第二章:接 口第三章:運算符重載第四章:模 板第一章: 類根本概念類的根本特性類的運用的特例根本概念 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類的根本特性構造函數與拷貝構造函數靜態成員與友元組合與承繼構造函數與拷貝構造函數C+規定與類同名的函

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

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

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

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

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

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

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

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

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

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

13、的對象作用在多線程編程中自動進展加解鎖操作自動實施對象援用銜接計數,進展對象的生命周期管理仿函數關鍵點重載“()運算符作用主要用于函數配接,參數配接,廣泛運用于STL第三章:模 板根本概念根本語法模板設計中的非習慣性思想模板設計的根本方法方法設計例如-STL規范模板庫模板的佳作根本概念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描畫了一個參數化的類模板類或者是一個參數化的函數模板函數,這個模板參數列表是用逗號分隔的類型列表在這個表單忠運用 class 或者是 typename 來標識這個數據類型。在某些情況下這個模板體內能夠不存在任何的數據類型。declaration 域必需是一個函數或者類的聲明 模板設計中的非習慣性思想聲明并不一定要定義定義類不一定要有成員、成員不僅僅是方法和成員變量定義類不一定要有成員成員不僅是方法和成員變量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、一個函數,并不定義制止某種缺省函數的調用聲明一個函數而不實現能夠是為了模板函數的泛化聲明一個函數能夠僅僅為了獲得特殊某一項功能聲明一個類而不實現制止模板類的泛化,只允許特化實施編譯某項功能的檢測如:編譯時辰斷言模板設計的根本方法編譯器斷言模板特化部分類常數映射型別型別映射型別型別選擇Null class or null function 和 Empty classType Traits模板嵌套Policy class利用模板設計的方法解題編譯時辰測試類型的可轉換性用到的技術:只定義不實現函數多態性可變參函數sizeoftemplatetypedef char small; class big

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

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

19、、itoa、accumulate根本運算fill、fill_n、swap、max、min、iter_swap、copy集合運算set_union、set_interseion、set_diffrence數據整理(以循環子為參數)count、count_if、find、find_if、for_each、merge、sort、upper、search、search_n仿函數一元仿函數二元仿函數二元化一元仿函數仿函數運用一元仿函數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;:二元仿函數template struct less : public binary_function bool operator()(const _Tp& _x, const _Tp& _y) const return _x _y; ;二元化一元仿函數Class binder1st binder1st(const Operation &op, const T1 &y); operator()(const T2 &x);仿函數運用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仿函數配接器容器配接器容器配接器Stacktemplate class _Tp, clas

溫馨提示

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

評論

0/150

提交評論