|
====================C++中引出模板的原因==================== 我們大家都知道,C++給我們提供了眾多的數(shù)據(jù)類型,比如說整型、浮點(diǎn)型、雙精度型、布爾型等等。而且C++還為我們提供了一種函數(shù)重載的方式,即函數(shù)名 相同,但是類型不同,那么也可以被C++編譯器所認(rèn)識(shí)到,進(jìn)而可以輸出不同的結(jié)果。下面,我們以一個(gè)程序?yàn)槔齺碚f明:
在上面這個(gè)程序的第4、5和6行,我們分別重載了sum()函數(shù),這三個(gè)sum()函數(shù)的功能是完全一樣的,都是返回一個(gè)兩數(shù)之和。但是我們注意到,每個(gè) sum()函數(shù)的類型不一樣,這樣,在主程序中輸入不同的參數(shù)時(shí),編譯器會(huì)自動(dòng)調(diào)用與之類型匹配的sum()函數(shù)輸出結(jié)果。程序運(yùn)行的結(jié)果如下:
上面這個(gè)程序雖然實(shí)現(xiàn)重載sum()函數(shù)達(dá)到對(duì)每種不同類型的參數(shù)的響應(yīng),但是,程序十分臃腫,一個(gè)小小的相加程序居然用了35行!這是不被接受的。那么我們不禁要想一想了,有沒有什么辦法能夠替代這種冗長的程序呢? 答案其實(shí)就是運(yùn)用模板!有了模板,我們就不需要重載了,接下來我們同樣以這個(gè)相加的程序來作為例子說明下:
呵呵,直觀上這個(gè)程序就比剛剛那個(gè)簡(jiǎn)潔,只有22行。下面我們來認(rèn)真分析一下這個(gè)程序到底說了什么。首先我們可以看到,在程序的第3行,我們就聲明了一個(gè)模板類型ElementType。這就是模板的聲明格式,如下:
template是聲明模板的關(guān)鍵字,尖括號(hào)中的class表示后面跟著的參數(shù)為自定義的模板類型,上面我們定義的類型為Type1和Type2。應(yīng)該特別注意的是,模板聲明之后不加;號(hào)!?。?/p> 之后在程序的5到8行我們用自定義的類型ElementType創(chuàng)建了一個(gè)模板函數(shù)。函數(shù)模板說白了就是一個(gè)模子,用這個(gè)模子我們就可以創(chuàng)建出許多功能相 同、參數(shù)類型和返回值不同的函數(shù),從而這樣就實(shí)現(xiàn)了代碼的重用~~~在這個(gè)函數(shù)中,我們并沒有為sum()函數(shù)提供具體的參數(shù)類型,只用 ElementType來代替。這樣編譯器就會(huì)根據(jù)實(shí)際傳遞進(jìn)來的類型和我們自定義的函數(shù)模板來創(chuàng)建sum()函數(shù)。由于這種工作分別在程序的第14行、 17行和20行被執(zhí)行了3次,所以說sum()函數(shù)被重載了3次,以適應(yīng)不同的類型的數(shù)據(jù)。 |
|
|