一、函式模板
1.概念
實際是建立乙個模型,然後根據這個模板去例項化一些物件,它的函式型別和形參型別不具體指定,用乙個虛擬的型別來代表,這個通用的函式就稱為函式模板,只要是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需要在模板中定義一次,在呼叫函式時,編譯器會根據實參的型別對函式進行推演,從而實現了函式不同的功能。
例如下面能實現加法功能的模板:
上面的class和struct不能互換,這也是c++中struct和class的乙個區別。template
<
class
t>
//class和typename都可以
t add
(t left, t right)
2.使用規則
(1)普通函式呼叫時支援型別的隱式轉換,函式模板不支援型別的隱式轉換。
將上面的函式print改為函式模板:void
(int a,
int b)
intmain()
解決上述問題的方法有兩種:template
<
class
t>
void
(t a, t b)
intmain()
第一種:稱為顯式例項化
第二種:將函式模板的引數列表進行擴充template
<
class
t>
void
(t a, t b)
intmain()
3.過載的特性template
<
classt1,
class
t2>
void
(t1 a, t2 b)
intmain()
函式模板機制:template
<
class
t>
void
(t a, t b)
template
<
class
t>
void
(t a, t b,t c)
編譯器會對函式模板進行兩次編譯
1.在宣告的地方對模板**本身進行編譯。
2.在呼叫的地方對引數替換後的**進行編譯。
說明模板函式是由函式模板產生的。
二、類模板
模板類就是類模板例項化後的乙個產物,類模板就是乙個飛機模型,模板類就是這個模型做出來的飛機。template
<
class
t>
class
seqlist
~seqlist()
;void
_checkcapacity()
}void
pushback
(const t& data)
//為什麼給成引用?因為有可能是自定義型別的引用,所以傳遞效率要高一些
void
popback()
} t&
operator
(size_t index)
const t&
operator
(size_t index)
const
t&front()
const t&
front()
const
t&back()
const t&
back()
const
void
insert
(size_t pos,
const t& data)
else
_pdata[pos]
= data;
_size++;}
}void
erase
(size_t pos)
else}}
private
: t* _pdata;
size_t _capacity;
size_t _size;};
template
<
class
t>
seqlist::~
seqlist()
}
C 函式模板和類模板
一 函式模板 c 提供了函式模板 function template 所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會...
函式模板和類模板(C )
所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。函式模板和普通函式的區別 函式模板不允許自動型別轉化,普通函式能夠進行自動型別轉換 函式模板和普通函式在一起呼叫的規則 1 函式模板可以像普通函式一樣被過載 2 c 編譯器優先...
C 類模板和函式模板
1 類模板 include using namespace std 通用類模板 template classt1,class t2 通用模板 class compare 在這裡不能寫型別 template classt1,class t2 這裡必須寫 compare compare 類模板全特化 t...