函式模板的概念和意義

2022-06-21 06:24:06 字數 1979 閱讀 8132

發散性問題

c++中有幾種交換變數的方法?

定義巨集**塊 vs 定義函式

程式設計實驗

#include #include 

using

namespace

std;

#define swap(t,a,b) \do\

while(0

)int

main()

利用定義巨集**塊的方法看上去很完美,但是巨集是預處理器處理的程式單元,後續出場的編譯器根本不知道巨集的存在,因此不推薦用巨集來完成類似函式的功能。因為不安全。

直接定義函式

#include #include 

using

namespace

std;

void swap(int& a, int&b)

void swap(double& a, double&b)

void swap(string& a, string&b)

intmain()

定義巨集**塊

-優點:**復用,適合所有的型別

-缺點:編譯器不知道巨集的存在,缺少型別檢查

定義函式

-優點:真正的函式呼叫,編譯器對型別進行檢查

-缺點:根據型別重複定義函式,無法**復用

泛型程式設計

-不考慮具體資料型別的程式設計方式

對於swap函式可以考慮下面的泛型寫法

void swap(t& a, t& b)

swap泛型寫法中的t不是乙個具體的資料型別,而是泛指任意的資料型別

函式模板

c++中泛型程式設計

-函式模板

一種特殊的函式可用不同型別進行呼叫

看起來和普通函式很相似,區別是型別可被引數化

template

void swap(t& a, t& b)

函式模板的語法規則

-template關鍵字用於宣告開始進行泛型程式設計

-typename關鍵字用於宣告泛指型別

template告訴編譯器開始泛型程式設計

typename t 告訴編譯器t是乙個泛指型別

函式模板的使用

-自動型別推導呼叫

-具體型別顯示呼叫

int a = 0;

int b = 1;

swap(a,b) //自動推導

float c = 2;

float d = 3;

swap(c,d); //顯示呼叫

函式模板初探:

#include #include 

using

namespace

std;

template

void swap(t& a, t&b)

intmain()

#include #include 

using

namespace

std;

template

void swap(t& a, t&b)

template

void sort(t a, int

len)}}

}template

void println(t a,int

len)

cout

<}int

main()

; println(a,5);

sort(a,5);

println(a,5);

string s=;

println(s,5);

sort(s,5);

println(s,5);

return0;

}

小結:函式模板是泛型程式設計在c++中的應用方式之一

函式模板能夠根據實參對引數型別進行推導

函式模板支援顯示的指定引數型別

函式模板是c++中重要的**復用方式

56 函式模板的概念和意義

1 發散性的問題 c 中有幾種交換變數的方法?答 兩種,定義巨集 塊 vs 定義函式 define swap t,a,b void swap int a,int b 定義巨集 塊 和 定義函式都能交換變數。但是對於巨集 塊,是由預處理器處理,編譯器不知道巨集 塊的存在。定義函式的話一次只能實現一種型...

第56課 函式模板的概念和意義

1.1 巨集 塊 vs 函式 變數的交換 include include using namespace std 巨集定義 塊 define swap t,a,b do while 0 這裡不加這個分號 可能是保證乙個整體,保證當做一條語句處理。for swap 考慮一下這種情況 定義函式方式 vo...

C 深度解析 45 函式模板的概念和意義

1.發散性問題 2.程式設計實驗 include include using namespace std 巨集定義 塊 define swap t,a,b do while 0 這裡不加這個分號 可能是保證乙個整體,保證當做一條語句處理。定義函式方式 void swap int a,int b 引用...