函式模板與類模板

2021-10-21 19:26:29 字數 2290 閱讀 5864

c++提供兩種模板機制:函式模板,類模板。

函式模板:

建立乙個通用函式,其返回值型別和形參型別不具體確定,用乙個虛擬的型別來代替。

如:void test(int a);其中的void和int可以先不確定,等執行的時候在確定。

語法:

template

<

typename t>

template - 宣告建立模板

typename - 表明其後面的符號是一種資料型別,可以用class代替

t - 通用的資料型別,名稱可以替換,通常為大寫字母

#include

#include

#include

using

namespace std;

template

<

typename t>

void

swap

(t &a, t &b)

intmain()

注意事項:

自動型別推導 ,必須推導出一致的資料型別t,才可以使用

模板必須要確定出t的資料型別,才可以使用

template

<

typename t>

void

test()

這樣呼叫上面這個函式的話就不能用自動型別推導了,要給定型別

如:test< int >();

普通函式與 函式模板的呼叫規則:

1.如果函式模板 和普通函式都可以實現,優先呼叫普通函式

2.可以通過空模板引數列表來強制呼叫函式模板,例:swap<>(引數,…,)

3.函式模板也可以發生過載(引數個數的不同)

4.如果函式模板可以產生更好的匹配,優先呼叫函式模板(如果呼叫普通函式需要強制型別轉換,則優先呼叫模板)

建立乙個通用類,類中的成員資料型別可以不具體制定,用乙個虛擬的型別來代表。

template

<

typename typename,

typename typeage>

class

person

typename m_name;

typeage m_age;};

void

test()

類模板與函式模板的區別:

1.類模板沒有自動型別推導的使用方式。

2.類模板在模板引數列表中可以有預設引數。

template

<

typename typename,

typename typeage=

int>

類模板與繼承:

當類模板碰到繼承時,需要注意以下幾點:

1.當子類繼承的父類是乙個類模板時,子類在宣告的時候,需指定出父類中的t的型別。

2.如果不指定,編譯器無法給子類分配記憶體

class

person

;class

son:

public person<

int>

;

3.如果想靈活指出父類中t的型別,子類也需變為類模板

template

<

typename t>

class

person

;template

<

typename t1,

typename t2>

class

son:

public person

;void

test()

類模板成員函式類外實現時,要加上模板引數列表

template

<

typename t1,

typename t2>

class

person

;template

<

typename t1,

typename t2>

person

::person

(t1 name, t2 age)

template

<

typename t1,

typename t2>

void person

::show()

void

test()

函式模板與類模板(模板類)

什麼是泛型程式設計?泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎。模板分為函式模板和類模板 下面我們就來說說函式模板 函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的型別版本 格式 template 返回值型別 函式名 引數列表 templatet1 ...

模板 函式模板與類模板

模板 template 是乙個將資料型別引數化的工具。模板分為函式模板和類模板兩種。在定義模板的時候不說明某些函式引數或者資料成員的型別,而將它們的資料型別作為模板引數。在使用模板時根據實參的資料型別確定模板引數即資料型別,從而得到模板的乙個例項。函式模板 function template 函式模...

函式模板與類模板

c 提供的函式模板可以定義乙個對任何型別變數進行操作的函式,從而大大增強了函式設計的通用性。使用函式模板的方法是先說明函式模板,然後例項化成相應的模板函式進行呼叫執行。函式模板的一般說明形式如下 template 模板形參表 返回值型別 函式名 模板函式形參表 其中,模板形參表 可以包含基本資料型別...