C 模板基礎

2021-10-10 00:18:40 字數 1684 閱讀 8531

在一般情況下,我們進行程式設計的時候就會確定參與運算所有物件的型別,以方便編譯器執行時候及時的分配記憶體,通俗的講也就是讓編譯器明白你要幹什麼,但是很多的時候會有很多尷尬的瞬間,比如舉乙個簡單的例子,現在如果我要對乙個整形的陣列進行排序,我們都知道函式的作用是包裝乙個**塊,方便我們重複呼叫,從而降低了**量,我現在設定了乙個用來排序的函式,我把引數設定成了整形的陣列,函式體裡包裝了氣泡排序,但是當我們在同乙個主函式中需要對浮點型的陣列進行排序的時候,我們已經書寫好的排序函式對這個浮點型的陣列無能為力,我們只能重新書寫乙個方法一模一樣的函式,只是把我們傳遞的引數變成了浮點型的陣列,這樣不僅增加了**量還會讓我們的程式顯得冗雜,沒有 高階感,模板就解決了這個問題

模板就用來表達邏輯結構相同但具體資料元素型別不同的資料物件的通用行為,也就是實現了引數的多型性,這些模板物件的型別不是實際的資料型別,而是一種引數化的型別(類屬型別)。分為兩類,帶類屬引數的函式稱為函式模板,帶類屬引數的類稱為類模板,這種使用了模板抽象了資料型別的程式設計奇數稱為泛型程式設計。下面我們具體介紹一下函式模板和類模板。

函式模板:

首先進行的是模板說明,需要使用類屬引數,在新版本的c++中我們習慣用乙個新的關鍵字typename進行類屬引數的說明,模板的說明形式為

template
關鍵字template是說明乙個模板,typename t1,typename t2……這些都是模板的類屬引數,到時候真正呼叫這個函式模板的時候編譯器會生成你所使用的引數的真正的函式,也就是用真正的引數替換了這個typename,這個真正的引數可以是int,double這些基本的資料型別也可以是自己構造的結構體型別,甚至是類型別,模板函式的掉用和普通函式的呼叫沒有什麼區別。所以這樣還是非常方便的。

需要注意的是如果我們傳遞的兩個類屬引數是不同的,編譯器是沒辦法進行隱式型別轉化的,這時候我們需要進行函數模板的過載。

下面書寫乙個例項,來仔細體會函式模板的使用和函式模板的過載,如果我們要找出傳遞的兩個資料的最大值,**如下

#include using namespace std;

templatet max(t a,t b)

int max(char a,int b) //過載函式

int main()

;

需要注意的是類屬引數必須在類說明**現一次。類模板的成員函式都是前面所講的函式模板,並且類模板的全部成員函式都需要定義在類外用如下格式書寫

template還需要注意的就是在宣告乙個類模板的物件的時候,必須使用實際型別引數代替類屬引數,從而把類模板轉化為模板類,下面用乙個例項來具體的看一下類模板的使用 

#include using namespace std;

template //定義類模板

class compare

;template compare::compare(numtype a,numtype b)

template numtype compare::max()

template numtype compare::min()

C 基礎 模板

特化和過載的區別 模板 template 指c 程式設計設計語言中採用型別作為引數的程式設計,支援通用程式設計。c 的標準庫提供許多有用的函式大多結合了模板的觀念,如stl以及io stream。模板是c 支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員...

C 基礎 模板基礎與函式模板

求兩個int float char型別的資料的最大值 c裡面要這樣寫 int maxint int x,int y double maxdouble double x,double y char maxchar char x,char y c 使用函式過載 多個同名函式處理多種型別資料的語法現象 可...

C 基礎 C 模板總結

模板是泛型程式設計的基礎,分為模板函式和模板類 泛型程式設計就是與型別無關的邏輯 是一種復用的方式。那麼為什麼要有泛型程式設計呢?c 是一門強型別的語言,無法像動態語言那樣,可以寫一段邏輯 把任意型別傳進去。為了解決這個問題所以有了泛型程式設計,通過把通用的邏輯設計為模板,可以擺脫型別的限制,提供了...