建立通用的模具,大大提高復用性
c++另一種程式設計思想成為泛型程式設計,主要利用的技術就是模板
c++提供兩種模板機制函式模板和類模板
1.1 函式模板
作用:建立乙個通用的函式,其函式返回值型別和形參型別可以不具體制定,用乙個虛擬的型別來代表
語法:template
函式宣告或定義
解釋:template——宣告建立模板
typename——表明其後面的符號是一種資料型別,可以用class代替
t——通用的資料型別,名稱可以替換,通常為大寫
template
<
typename t>
void
swap
(t &a,t &b)
模板呼叫:
int a=10;
int b=20;
swap
(a,b)
;//自動型別轉換
swap<
int>
(a,b)
;//顯示型別轉換
1.1.1 函式模板注意事項
自動型別推導,必須推導出一致的資料型別t才可以使用
模板必須要確定出t的資料型別,才可以使用
1.1.2 普通函式與函式模板的區別
普通函式與函式模板區別:
普通函式呼叫時可以發生自動型別轉換
函式模板呼叫時,如果利用自動型別推導,不會發生隱式型別轉換
如果利用顯示指定型別的方式,可以發生隱式型別轉換
1.1.3 普通函式與函式模板的呼叫規則
呼叫規則如下:
如果函式模板和普通函式都可以實現,優先呼叫普通函式
可以通過空模板引數列表來強制呼叫函式模板
函式模板也可以發生過載
如果函式模板可以產生更好的匹配,優先呼叫函式模板
1.2 類模板
作用:建立乙個通用類,類中的成員資料型別可以不具體制定,用乙個虛擬的型別來代表
語法:template
類解釋:
template——宣告建立模板
typename——表示其後面的符號是一種資料型別,可以用class代替
t——通用的資料型別,名稱可以替換,通常為大寫字母
template
<
class
nametype
,class
agetype
>
class
person
nametype m_name;
agetype m_age;};
intmain()
1.2.1 類模板與函式模板的區別
區別主要有兩點:
類模板沒有自動型別推導的方式
類模板在模板引數列表中可以有預設引數
1.2.2 類模板中成員函式建立時機
普通類中的成員函式一開始就可以建立
類模板中的成員函式在呼叫時才建立
1.2.3 類模板物件做函式引數
三種傳入方式:
指定傳入的型別——直接顯示物件的資料型別
引數模板化——將物件中的引數變為模板進行傳遞
整個類模板化——將這個物件型別模板化進行傳遞
1.2.4 類模板與繼承
當子類繼承的父類是乙個類模板時,子類在宣告的時候,要指定出父類中t的型別
如果不指定,編譯器無法給子類分配記憶體
如果想靈活指定出父類中t的型別,子類也需要變為類模板
template
<
class
t>
class
base
;//class son:public base 錯誤, c++編譯器給子類分配記憶體,必須知道父類中t的型別才可以向下繼承
class
son:
public base<
int>
;template
<
classt1,
class
t2>
class
son2
:public base
;int
main()
1.2.5 類模板函式類外實現
類模板中成員函式類外實現時,需要加上模板引數列表
template
<
classt1,
class
t2>
class
person
;template
<
classt1,
class
t2>
person
::person
(t1 name,t2 age)
template
<
classt1,
class
t2>
void person
::showperson()
intmain()
總結:
類模板類外實現時:返回值型別 類名::函式名(){}
1.2.6 類模板與友元
全域性函式類內實現:直接在類內宣告友元
全域性函式類外實現:需要提前讓編譯器知道全域性函式的存在
太複雜
C 基礎學習筆記 類模板
一 類模板 1 類模板作用 語法 template typename t class 類名 解釋 include include using namespace std class person tyname name tyage age intmain 2 類模板與函式模板的區別 1.類模板無法使...
學習筆記08
2017年9月27日 學習筆記與總結 1.定位方式 相對定位 position relative 1 相對於自己原來的位置進行定位 2 如果是僅僅新增了相對定位的樣式,position relative 顯示效果不發生變化 3 使用定位讓元素發生偏移的 可以使用z index來調整顯示順序 最大值為...
C 學習筆記day08
1 排序函式 void order int p1,int p2 sort ia 9,sizeof int orderint for int i 0 i 9 i coutpers 0 id 1 pers 0 age 29 strcpy pers 0 name liucy pers 1 id 2 per...