函式模版和類模版
概述:
C++提供了函式模板(function template)。所謂函式模板,實際上是建立一個通用函式,其函式型別和形參型別不具體指定,用一個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別來取代模板中的虛擬型別,從而實現了不同函式的功能。
1)C++提供兩種模板機制:函式模板、類别範本
2)類屬 —— 型別引數化,又稱引數模板
使得程式(演算法)可以從邏輯功能上抽象,把被處理的物件(資料)型別作為引數傳遞。
總結:
模板把函式或類要處理的資料型別引數化,表現為引數的多型性,稱為類屬。
模板用於表達邏輯結構相同,但具體資料元素型別不同的資料物件的通用行為。
為什麼要有函式模版:
寫n個函式,交換char型別、int型別、double型別變數的值。
函式模版語法:
template <型別形式參數列>
型別 函式名 (形式參數列)
{
語句序列
}
函式模版定義由模版說明和函式定義組成
模版說明的類屬引數必須在函式定義中至少出現一次。
函式參數列中可以使用類屬型別引數,也可以使用一般型別引數
myswap(a, b); //顯示型別呼叫
myswap(a, b); //自動資料型別推導
函式模版遇上函式過載,函式模版和普通函式的區別:函式模板不允許自動型別轉化
普通函式能夠進行自動型別轉換
函式模版和普通函式在一起呼叫規則
1 函式模板可以像普通函式一樣被過載
2 C++編譯器優先考慮普通函式
3 如果函式模板可以產生一個更好的匹配,那麼選擇模板
4 可以通過空模板實參列表的語法限定編譯器只通過模板匹配
函式模版機制
編譯器並不是把函式模板處理成能夠處理任意類的函式
編譯器從函式模板通過具體型別產生不同的函式
編譯器會對函式模板進行兩次編譯
在宣告的地方對模板程式碼本身進行編譯;在呼叫的地方對引數替換後的程式碼進行編譯。
為什麼有類模版
類别範本用於實現類所需資料的型別引數化
類别範本在表示如陣列、表、圖等資料結構顯得特別重要,這些資料結構的表示和演算法不受所包含的元素型別的影響
繼承中的類模版語法
派生普通類
class B : public A
{
public:
B(int a=10, int b=20) : A(a)
{
this->b = b;
}
void printB()
{
cout << “a:” << a << ” b: ” << b << endl;
}
protected:
private:
int b;
};
派生類模版
template
class C : public A
{
public:
C(T c, T a) : A(a)
{
this->c = c;
}
void printC()
{
cout << “c:” << c <
相關文章
- 尤拉函式性質和模版函式
- 模版
- golangWeb框架---github.com/gin-gonic/gin學習六(靜態檔案、模版、模版函式)GolangWeb框架Github函式
- java Freemarker 模版引擎工具類Java
- 理解模版
- KMP模版KMP
- 【45】運用成員函式模版接受所有相容型別函式型別
- 設計模式-模版設計模式概述和使用-抽象類設計模式抽象
- 模版方法模式模式
- 【模版】線段樹
- SPFA && dijkstra 模版
- nodejs express框架一個工程中同時使用ejs模版和jade模版NodeJSExpress框架
- 微信小程式-模組化和模版化微信小程式
- 【46】需要型別轉換時請為模版定義非成員函式型別函式
- HTML郵件模版分享HTML
- 模版方法設計模式設計模式
- 小程式 模版訊息
- 前端快速開發模版前端
- 搭建flutter框架模版常用Flutter框架
- ACM演算法模版ACM演算法
- 設計模式——模版方法模式設計模式
- CI 框架整合 Smarty 模版引擎框架
- 資料庫巡檢模版資料庫
- 從例子看C++模版C++
- joomla 元件、模版下載地址OOM元件
- 必備知識點 模版
- 【43】學習處理模版化基類內的名稱
- 小程式 template 模版使用方法
- 模版匹配定位跟蹤原始碼原始碼
- Laravel 文件閱讀:Blade 模版Laravel
- 使用AppCompat專案模版APP
- check_nginxpnp4nagios模版NginxiOS
- apose 根據excel 匯出模版Excel
- Twig模版語言入門
- 招標檔案模版及要素
- 類函式和物件函式 PHP函式物件PHP
- C/C++——跟我重寫智慧指標auto_ptr模版類C++指標
- android studio模版功能簡介Android