1. 程式人生 > >C++語言筆記系列之二十——模版

C++語言筆記系列之二十——模版

輸出 類模板 pos 有一個 class 初始 個數 創建對象 example

1.隨意輸入兩個數x和y,輸出最大值max。


int max(int x, int y)
{return x>y?

x:y;}
2.函數模版
(1)用一種或者多種通用類型去表示函數——函數模版。
(2)函數模版因為沒有詳細的數據類型。所以函數模版不可執行。
(3)作用:模板就是實現代碼重用機制的一種工具,它能夠實現類型參數化,即把類型定義為參數, 從而實現了真正的代碼可重用性。模版能夠分為兩類,一個是函數模版。另外一個是類模版。
註:函數模版在調用時必須用詳細的類型來替代,使之轉換為一個詳細函數。
3.函數模版的定義:
template <class T>
A.模版定義的關鍵詞:template
<class T>用來說明一個通用類型T。
B.class T僅僅用來表示一種類型,也能夠表示多個通用類型:
<class T1, class T2, class T3, ..., class Tn>
4.函數模版的調用
(1)將函數模版作為一個函數調用。
(2)系統將自己主動依照調用表達式實參的類型來替代函數模版中的通用類型,使之轉化為一個詳細函數然後運行。


example 1

#include <iostream.h>

template <class T>
T max(T x, T y)
{return x>y?

x:y;}
int main()
{
int x = 3, y = 4;
double d1 = 2.3, d2 = 3.4;
long l1 = 32L, l2 = 35L;
cout<<max(x, y)<<endl;
cout<<max(d1, d2)<<endl;
cout<<max(l1, l2)<<endl;
}
程序輸出:
4
3.4
35
分析:因為實參x,y為int類型,系統自己主動將模版中的類型T用int來替代。


函數轉化:int max(int x, int y) {return x>y?

:x:y;}

example 2

#include <iostream.h>

template <class T>
void exchange(T &x, T &y, T &z)
{
T t;
if(x>y) {t = x; x = y; y = z;}
if(x>z) {t = x; x = z; z = t;}
if(y>z) {t = y; y = z; z = t;}
}
5.函數模版的重載
(1)函數模版同意隱性類型轉換。
(2)函數模版重載時不同意重載為一個模版——函數模版的重載僅僅能夠是一個詳細的顯性函數。


(3)函數模版的重載僅僅能夠在函數模版不可調用時,系統將自己主動的通過隱式類型轉換後調用函數模版時重載。


example 3

#include <iostream.h>

template <class T>
T max(T x, T y)
{
cout<<"This is T max()."<<endl;
return x>y?x:y;
}
double max(int x, double y)
{
cout<<"This is double max()."<<endl;
return x>y?

x:y;
}
int main()
{
int x1 = 2, x2 = 3;
double d1 = 2.3, d2 = 3.4;
long l1 = 3L, l2 = 5L;
cout<<max(x1, x2)<<endl; //調模版
cout<<max(l1, l2)<<endl; //調模版
cout<<max(x1, l2)<<endl; //調重載
cout<<max(x1, d2)<<endl; //調重載
cout<<max(d1, d2)<<endl; //調模版
}
程序輸出:
This is T max().
3
This is T max().
5
This is double max().
5
This is double max().
3.4
This is double max().
3.4
模版的重載僅僅可以有一個詳細的函數。
6.類模版
template <class T>
class Tany
{
T x, y;
public:
Tany(T xx, T yy):x(xx),y(yy) {}
T getx() {return x;}
T gety() {return y;}
};
類模板的詳細化實現:
(1)通過類模板創建對象時由詳細類型替代模版類型。
(2)類模版對象的定義
類名<詳細類型>對象名(初始化列表)
若有多個通用類型必須表示多個詳細類型
比如:Tany <int> objint(3, 4);
Tany <double> objdouble(3.4, 5.6);

C++語言筆記系列之二十——模版