講義課件教程1_第1頁
講義課件教程1_第2頁
講義課件教程1_第3頁
講義課件教程1_第4頁
講義課件教程1_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、針對(returnx 針對(returnx y?x :doublemax_double(doublex,doublereturnx y?x :stringmax_string(stringx,stringreturnx y?x :借助參數(shù)宏擺脫類型的借助參數(shù)宏擺脫類型的#definemax(x,y)(x)(y)?(x):(y) cout max (123, 456) endl;coutmax(1.23,4.56)stringa=o,b =coutmax(a,b)couty ?x :y;MAX)MAXMAX#definemax(T)cout)(123,456)coutmax(double)(1.

2、23,4.56)coutmax(string)o,world)模板 templatetypename1, typename 類型參數(shù)2, . template A function (b arg) _C類型參類型參 templatetypenameTconst&max(Tconst&x,Tconst&returnx y ?y :模板templateTconst&max模板templateTconst&maxTconst&x,Tconst&y)returnxy?y:x;const&maxconst&const&returnx y?y :x;doubleconst&max(doubleconst&

3、x,doubleconst&returnx y?y :x;stringconst&max(stringconst&x,stringconst&y)returnxy?y:x;使用函數(shù)模板時才實例 函數(shù)模板名類型實參1,2,使用函數(shù)模板時才實例 函數(shù)模板名(123, :max(1.23, :maxo,二次編一次是在實例化之前,先檢查模板代碼本身,查看語法是否正確形式的機器指令作為第一二次編一次是在實例化之前,先檢查模板代碼本身,查看語法是否正確形式的機器指令作為第一次編譯的結(jié)果,僅僅是在編譯形成的用于描述該函數(shù)模板的數(shù)據(jù)結(jié)構(gòu),即所謂模板表【參見:TTSCOOKBOOK【參見:TTSCOOKBOOK

4、根據(jù)調(diào)用參數(shù)推斷模板根據(jù)調(diào)用參數(shù)推斷模板voidfoo(Tconst&x,Tconst&y)coutT=typeid(T).name()endl;foo (123, 456); / T = i doublex=1.23,y=4.56;foo (x,y);/T=foofooo,world);/T=otarena不能隱式推斷的三種情不是全部模板參數(shù)都與調(diào)用參不能隱式推斷的三種情不是全部模板參數(shù)都與調(diào)用參數(shù)的類型templatevoidfoo(Aarg).Vvar.foo123,string隱式推斷的同時不允許隱式類型templatevoidfoo(Tx,Ty).foo1234.56foo(123,

5、foo (double)123, 4.56); / 顯式類型轉(zhuǎn)換可以隱返回類型不能隱式templateRfoo(Aarg).retfoo1.23ret=隱式推斷與缺省值之間template隱式推斷與缺省值之間templateTconst&max(Tconst&x,Tconst&returnx y?y :coutmax1.234.56endl g+.-std=c+0 x /GCC 4.8 g+.-std=c+11/GCC cout:max(1.23,4.56)endl;/【參見:TTSCOOKBOOK【參見:TTSCOOKBOOK普通函數(shù)和函數(shù)重普通函數(shù)和函數(shù)重charconst*const&m

6、ax(charconst*const&charconst*const&y)./Tconst&max(Tconst&x,Tconst&y)./charconst*x=ABC; char const* y = AB;cout:max(x,y)endl;/cout:max(100,200)endl;/函數(shù)模板不支持隱式類型轉(zhuǎn)charconst*函數(shù)模板不支持隱式類型轉(zhuǎn)charconst*const&max(charconst*const&charconst*const&y)./Tconst&max(Tconst&x,Tconst&y)./charconst*x=ABC; char* y = AB;c

7、out:max(x,y)endl;/顯式指定空模板參數(shù)列顯式指定空模板參數(shù)列charconst*const&max(charconst*const&charconst*const&y)./Tconst&max(Tconst&x,Tconst&y)./templatetypenameT*const&max(T*const&x,T*const&y)./char const* x = AB; charconst*y=ABC;cout:max(x,y)endl;/保證模板參數(shù)與調(diào)用參數(shù)一保證模板參數(shù)與調(diào)用參數(shù)一Tconst&max(Tconst&x,Tconst&y)./templatetypenam

8、eT*const&max(T*const&x,T*const&y)./charconst*x=charconst*y=cout:max(x,y)endl;/函數(shù)模板內(nèi)優(yōu)先選擇普通函charconst*函數(shù)模板內(nèi)優(yōu)先選擇普通函charconst*const&max(charconst*const&charconst*const&y)./Tconst&max(Tconst&x,Tconst&y)./templatetypenameTconst&max(Tconst&x,Tconst&y,Tconst&return:max(:max(x,y),z);/charconst*x=ABC; char co

9、nst* y = AB; char const* z = A;cout:max(x,y,z)template模板 templatetypename1, typename 類型參數(shù)2, .template class MyClass Abfoo(_C類型參templatetypenameM,typename類型參templateclassMyClass:public MRfunction(Aarg).Vvar.typedefT* 類模板的兩步實例編譯期:編譯類模板的兩步實例編譯期:編譯器將類模板實例化為類并生成對象創(chuàng)建運行期:處理器執(zhí)行對象創(chuàng)建指令將類實例化為內(nèi)存 類模板名類型實參1,2,調(diào)用誰

10、實例化template調(diào)用誰實例化templateclass T const& max (void) const returnm_xm_y?m_y:m_x;egerbooloperatorci(123,coutci.max()ci(123,【參見:TTSCOOKBOOK【參見:TTSCOOKBOOK類模板的靜態(tài)成templateclass 類模板的靜態(tài)成templateclass sicvoid(void)cout&m_i &m_tendl;ssicTm_t;【參見:TTSCOOKBOOK【參見:TTSCOOKBOOK類模板的遞歸實classArray類模板的遞歸實classArrayTa1;

11、a2a3;【參見:TTSCOOKBOOK【參見:TTSCOOKBOOK全類特templateclassComparatorchar 全類特templateclassComparatorchar Comparator(charconst*const&charconst*const&y):m_x(x),m_y(y) char const* const& max (void) const returnstrcmp(m_x,m_y)0?m_y:m_x;charconst*const&m_x,o,coutcmp.max()endl;/成員特templateclass Comparator成員特templ

12、ateclass Comparator(Tconst&x,Tconst&y): m_x (x), m_y (y) Tconst&max(void)returnm_xm_y?m_ym_x;Tconst&m_x,&m_y;templatecharconst*const&Comparator:max (void) const returnstrcmp(m_x,m_y)0?m_y:m_x;【參見:TTSCOOKBOOK【參見:TTSCOOKBOOK對部分模板參數(shù)自行指templateclass對部分模板參數(shù)自行指templateclassX/ 針對第二個模板參數(shù)取short的局部特templatecl

13、assX/ 針對兩個模板參數(shù)取相同類型的局部特templateclassX/ 針對兩個模板參數(shù)取某種類型指針的局部特templateclassX/ 針對兩個模板參數(shù)取某種的局部templateclassX/ 針對兩個模板參數(shù)取某種類型數(shù)組的局部特templateclassX同等程度地特化匹配導(dǎo)致歧 同等程度地特化匹配導(dǎo)致歧 *xtemplateclassXtemplateclassX *【參見:TTSCOOKBOOK【參見:TTSCOOKBOOK類模板可以帶有缺省參實例化類模板時,如果提供了模板實參則用所提供的模板實參實例化相應(yīng)的模板形參,如果沒有提供模板實參則相應(yīng)的模板形參取缺省值類模板可以

14、帶有缺省參實例化類模板時,如果提供了模板實參則用所提供的模板實參實例化相應(yīng)的模板形參,如果沒有提供模板實參則相應(yīng)的模板形參取缺省值 templateclassX. Xx1(.);/Xx1Xx2(.);/Xx2Xx3(.);/,double,stringx3后面的參數(shù)可前面參 templatetypenameA,后面的參數(shù)可前面參 template templatetypenameT,typenameC=vector class Stack voidpush(Tconst&m_contain (elem); 【參見:TTSCOOKBOOK【參見:TTSCOOKBOOK非類型模板參非類型模板參數(shù)值形式模板參普通數(shù)值作為模板參templatetypenameT,size_t普通數(shù)值作為模板參templateclass

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論