- 相關(guān)推薦
計算機二級C++模板概述
引導(dǎo)語;函數(shù)表示每個輸入值對應(yīng)唯一輸出值的一種對應(yīng)關(guān)系。以下是百分網(wǎng)小編分享給大家的計算機二級C++模板概述,歡迎閱讀!
一、函數(shù)模板
1?函數(shù)模板的概念、定義與應(yīng)用
函數(shù)模板是一系列相關(guān)函數(shù)的模型或樣板,這些函數(shù)的源代碼形式相同,只是所針對的數(shù)據(jù)類型不同。對于函數(shù)模板,數(shù)據(jù)類型本身成了它的參數(shù),因而是一種參數(shù)化類型的函數(shù)。聲明一個函數(shù)模板的格式是:
template??模板形參表聲明???函數(shù)聲明?
其中的?模板形參表聲明?是由一個或多個?模板形參?組成(如果是多個,需要用逗號隔開)。每個?模板形參?具有下面幾種形式:
(1)typename?參數(shù)名?
(2)class?參數(shù)名?
(3)?類型修飾??參數(shù)名?
這里的?參數(shù)名?可以是任意的標(biāo)識符。在這三種形式中,前兩種是等價的:在聲明模板參數(shù)時,關(guān)鍵字typename與class可以互換。用typename或class聲明的參數(shù)稱為虛擬類型參數(shù);而用?類型修飾?聲明的參數(shù)則挑為常規(guī)參數(shù),在形式上與普通的函數(shù)參數(shù)聲明相同。格式中的?函數(shù)聲明?與一般函數(shù)的聲明類似,只是某些類型修飾符被虛擬類型參數(shù)所替代。
2?模板實參的省略
在調(diào)用一個模板函數(shù)時,編譯系統(tǒng)需要足夠的信息來判別每個虛擬類型參數(shù)所對應(yīng)的實際類型,可以從兩個不同的渠道獲得這樣的信息:從模板實參表(用?和?括起來的參數(shù)表)或從模板函數(shù)實參表(用(和)括起來的參數(shù)表),模板實參的信息優(yōu)先于函數(shù)實參的信息。如果從后者獲得的信息已經(jīng)能夠判定其中部分或全部虛擬類型參數(shù)所對應(yīng)的實際參數(shù),而且它們又正好是參數(shù)表中最后的若干參數(shù),則模板實參表中的那幾個參數(shù)可以省略。如果模板實參表中的實參都被省略了,則連空表??也可以不要。因此,若x和y都是unsigned型,則addTo?unsigned?(x,y,9)、addT? ?(x、y、9)和addTo(x,y,9)三者是等價的。反之,對于某個模板實參,如果從模板函數(shù)的實參表中無法獲得同樣的信息,就不能省略;或者雖然能夠獲得同樣的信息,但在它后面還有其他不能省略的實參,則其自身還是不能省略。
下面列舉幾種模板實參不能省略的情況。
(1)從模板函數(shù)實參表獲得的信息矛盾。
(2)需要獲得特定類型的返回值,而不管參數(shù)的類型如何。
(3)虛擬類型參數(shù)沒有出現(xiàn)在模板函數(shù)的形參表中。
(4)函數(shù)模板含有常規(guī)形參。
3?函數(shù)模板的定制
對不同的數(shù)據(jù)類型在處理形式上的統(tǒng)一性是建立模板的基礎(chǔ)。但是,這種統(tǒng)一性是相對的,個別數(shù)據(jù)類型有可能比較特殊,在處理形式上與大多數(shù)數(shù)據(jù)類型不一致。針對這樣的特殊情況,可以通過重載模板函數(shù)進(jìn)行定制。這樣把重載的模板稱為補充模板,相應(yīng)地,原模板則稱為主模板。
二、類模板
1?類模板的概念、定義與應(yīng)用
類模板就是一系列相關(guān)類的模型或樣板,這些類的成員組成相同,成員函數(shù)的源代碼形式相同,所不同的只是所針對的類型(成員的類型以及成員函數(shù)的參數(shù)和返回值的類型)。對于類模板,數(shù)據(jù)類型本身成了它的參數(shù),因而是一種參數(shù)化類型的類,是類的生成器。類模板中聲明的類稱為模板類。
聲明一個類模板的格式是:
template??模板形參表聲明???類聲明?
模板形參表聲明?是由一個或多個模板形參組成;與一般的類聲明的不同之處在于,這里的?類聲明?要用?模板形參表聲明?中聲明的虛擬類型參數(shù)來修飾它的某些成員,使模板類獨立于任何具體的數(shù)據(jù)類型。
在模板外對成員函數(shù)的聲明格式是:
template?模板形參表聲明?
返回類型??類名???模板形參表??::?函數(shù)名?(?函數(shù)形參表?)?函數(shù)體?
其中模板形參表就是由模板形參表聲明中聲明的參數(shù)名組成的序列。應(yīng)注意,類模板的成員函數(shù)都是模板函數(shù),因此在模板外聲明成員函數(shù)的格式與聲明普通模板函數(shù)十分相似。
用類模板定義對象的格式是:
類名???模板實參表?? ?對象名?;
或
類名???模板實參表?? ?對象名?(?構(gòu)造函數(shù)實參表?);
在定義對象的過程中,編譯系統(tǒng)會自動地根據(jù)需要生成相應(yīng)的類定義,這種依據(jù)類模板生成類定義的過程稱為類模板的實例化。類模板實例所生成的每一個類定義就是相應(yīng)類模板的一個實例。
在用類模板定義對象時,由于沒有像函數(shù)實參表這樣的額外信息渠道,因此無法按函數(shù)模板的方式省略模板實參。但是,可以為類模板的參數(shù)設(shè)置默認(rèn)值。具體地說,在定義類模板時,可以為模板形參表聲明的最后若干個參數(shù)設(shè)置默認(rèn)值;而這些有默認(rèn)值的參數(shù)中,最后的若干個對應(yīng)實參可以在定義對象時省略。
2 類模板的派生與繼承
一談到繼承總涉及到兩個類:基類和派生類,它們中任何一個都有可能是模板類,或模板類的實例。下面列出常見的幾種情況。
(1)普通類繼承類模板的一個實例。
可以通過繼承類模板的一個實例來聲明一個類。
(2)模板類繼承普通類。
在聲明一個類模板時,應(yīng)盡可能將類模板中與虛擬類型參數(shù)無關(guān)的成員剝離出來,構(gòu)成一個普通類,作為類模板的基類。因此,類模板繼承普通類的情況是十分常見的。
(3)模板類繼承模板類。
可以通過繼承一個模板類來聲明一個類模板。
(4)模板類繼承模板參數(shù)給出的基類。
模板的派生甚至可以繼承一個未知的基類。也就是說,繼承哪個基類由模板參數(shù)決定。
3?類模板的定制
與函數(shù)模板類似,類模板有時也需要定制,以適應(yīng)某些特殊情況。類模板的定制也是通過定義補充模板實現(xiàn)的,稱為模板的特例化,每個補充模板就是主模板的一個特例。
【計算機二級C++概述】相關(guān)文章:
計算機二級C++函數(shù)考點07-22
計算機二級C++模擬試題及答案09-22
計算機二級C++模擬題及答案05-12
計算機二級C++程序題及答案解析10-25
計算機二級C++C++語言概述09-24
全國計算機二級《C++》上機試題及答案08-15
2017計算機二級C++模擬題及答案06-22