C 學習筆記二十一 函式模板與類模板

2021-10-22 07:41:19 字數 2061 閱讀 6573

針對函式模板與類模板我想摒棄課本固有的理論知識定義,用我自己的話來見簡單的敘述作用以及概念。

函式模板有什麼用?

c++有很多基本的資料型別,比如 int ,double ,float…等等。我們在定義乙個函式時會定義乙個返回型別,表示函式返回值,但是這種返回值有乙個壞處,就是只能返回單一的資料型別。如果兩個引數基本型別不一致,但是想執行的函式體是一致這樣我們就需要寫兩個函式,比如對於float 和int 基本型別來說,我們進行取絕對值的操作我們就需要寫兩個形參不同的函式

int abs (

int x)

float

abs(

float x)

從以上我們可以看到,單一的返回型別對於上述情況顯得過於累贅,因此,函式模板的概念應運而生。它最主要的特點你就是可以先不說明返回值的型別,而把函式對物件進行的操作當成乙個模板,對於任何的物件都可以執行函式的操作。基本的宣告格式

template

<

typename 引數

//中間的typename 可以替換成 class

template

<

class 引數

//其中template 是一種宣告格式,後面的引數名就可以當作一種函式型別

接下來我們以上面的函式模板來舉乙個取絕對值的例子

# include

# include

using

namespace std;

template

<

typename t>

t abs

(t x)

intmain()

執行結果如下

以上就是函式模板,當你傳入不同引數型別的時候,系統可以根據引數型別繫結生成對應的函式。進而可以節省很多時間與空間。

類模板有什麼用?

根據以上我們能夠了解函式模板的作用,其實類模板也是如此。我們在定義乙個類物件的成員的時,也只能定義一些基本的資料型別,但是們通過類模板可以先不用定義成員資料的型別。其實這一些模板操作,是讓我們不管是函式也好,成員也好。直接對物件進行操作。可以免去很多不必要的麻煩。

我們直接舉例子

# include

# include

using

namespace std;

//類模板 其實只是宣告了一種引數型別,而這種型別暫時還不確定

template

<

class

rui,

class

rui1

>

class

test1

;template

<

class

rui,

class

rui1

>

test1

::test1

(rui x1,rui1 istrue1):x

(x1)

,istrue

(istrue1)

template

<

class

rui,

class

rui1

>

void test1

::getvalue()

intmain()

//過載操作符

//返回型別 operator 符號(參數列)

我們在上面首先要注意以下幾點

1.在宣告模板類之後。我們要是在類外定義函式成員的格式為

函式型別 類模板名《引數名》::函式名(引數名)

2.在使用類模板的時候要宣告具體的型別了。比如文中的

test1r111(1, true);宣告了兩個引數的型別。

C 學習筆記(一)函式模板與類模板

本文講解了c 函式模板和類模板的相關知識,當需要多個函式對多個不同的資料型別的資料進行相同的處理時,需要多次過載函式,而使用函式模板,編譯器產生不同的目標 函式來適當地處理每個函式的呼叫,顯得更加簡便。將這一概念引入至類中,將類中資料成員的型別都引數化 把資料型別定義為引數 在初始化類物件的時候,根...

c語言學習筆記二十一

makefile中關於變數的語法規則 示例 如下 foo bar bar huh?all echo foo 執行make後輸出 huh?優點 可以把變數的值推遲到後面定義 示例 main.o main.c cc cfags cppflags c cc gcc 編譯選項 cfags o g 預處理選項...

C 函式模板與類模板

一 函式模板 1 函式模板 建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬型別來代表這個通用函式來代表。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別來取代模板中虛擬的型別,從而實現不同函式的功能。作用 功能相同...