C++模板
什么是泛型編程和模板就漾?
泛型是一種編程思想苍匆,而模板是泛型編程在C++上的實(shí)現(xiàn)方法
以往的函數(shù)都會(huì)是有固定的數(shù)據(jù)類型系冗,調(diào)用參數(shù)也必須是同樣或者是兼容的類型淹仑。
而模板可以實(shí)現(xiàn)函數(shù)和類空闲,在設(shè)計(jì)時(shí)不用指定固定的型別(types)
types的解釋令杈,我們應(yīng)該理解為“型別”更為貼切。
模板的聲明格式:
在模板語(yǔ)法中碴倾,關(guān)鍵字typename和class都是一樣的(只是在模板語(yǔ)法中是通用的)
建議用typename逗噩,因?yàn)橛胏lass定義的話容易引起誤解,讓人產(chǎn)生錯(cuò)覺(jué)跌榔,以為這個(gè)型別只能是類
模板分類
C++主要有兩種類型的模板:類模板和函數(shù)模板异雁。
Class template的參數(shù)是約束在整個(gè)類(對(duì)象)里面。
Function template的泛型約束是在參數(shù)上面僧须。
模板實(shí)例化:
模板的聲明沒(méi)有完全定義纲刀,就是說(shuō)在定義的時(shí)候是不完整的,只是實(shí)現(xiàn)了語(yǔ)法框架担平。
實(shí)例化(調(diào)用時(shí))從模板
Template是泛化的示绊,不具體的,當(dāng)要調(diào)用它的時(shí)候暂论,要告訴編譯器它具體是什么型別的面褐,或者讓編譯器能夠推導(dǎo)出來(lái)。
函數(shù)模板:它是語(yǔ)法相同在而擁有不同型別的空另,
但是不可以使用不相同型別的參數(shù)來(lái)調(diào)用Max盆耽,因?yàn)榫幾g器在編譯時(shí)就要知道Max函數(shù)需要傳遞的型別,但如果是兩個(gè)不相同型別編譯器就無(wú)法確定是哪一種扼菠,這樣編譯器會(huì)報(bào)錯(cuò)摄杂。
強(qiáng)制轉(zhuǎn)換參數(shù)型別 也可以用
12.MyClass obj;同時(shí)滿足了MyClass和MyClass