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

來源:互聯網
上載者:User

標籤:機制   函數模版   ret   類型轉換   定義   c++   說明   通過   分析   

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++語言筆記系列之二十——模版

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.