c++模板-創(chuàng)新互聯(lián)

文章目錄
  • 前言
  • 一、函數(shù)模板1
  • 二、類模板
  • 總結(jié)

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站制作、成都做網(wǎng)站、中陽網(wǎng)絡推廣、小程序開發(fā)、中陽網(wǎng)絡營銷、中陽企業(yè)策劃、中陽品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供中陽建站搭建服務,24小時服務熱線:18980820575,官方網(wǎng)址:muchs.cn
前言

模板就是實現(xiàn)代碼重用機制的一種工具,它可以實現(xiàn)類型參數(shù)化,即把類型定義為參數(shù), 從而實現(xiàn)了真正的代碼可重用性。模版可以分為兩類,一個是函數(shù)模版,另外一個是類模版。

一、函數(shù)模板

函數(shù)的重載可以實現(xiàn)一個函數(shù)名多用,將是實現(xiàn)相同或類似功能的函數(shù)用一個函數(shù)名定義,雖然含義清楚,但仍要分別定義每一個函數(shù),為此,c++提供函數(shù)模板。建立一個通用函數(shù),其函數(shù)類型和形參類型不具體指定,用一個虛擬的類型來代表,這個通用函數(shù)就是函數(shù)模板。

#includeusing namespace stdl
template//模板聲明,T為類型參數(shù)
T max(T a,T b,T c)
{
    if(b>a)  a=b;
    if(c>a)  a=c;
    return a;
}
int main()
{
    int i1=185, i2=-76, i3=5678,i;
    double d1=5.11, d2=231.12, d3=-3214.78,d;
    long g1=67854,g2=-912456,g3=673456,g;
    i=max(i1,i2,i3);//調(diào)用模板函數(shù),T被int取代
    d=max(d1,d2,d3);
    g=max(g1,g2,g3);
    cout<

上面就是一個簡單的模板函數(shù)。

不難看出,定義函數(shù)模板的一般形式為:

template函數(shù)定義

此外,typename可換成class。

template的含義即是模板,<>中先寫關鍵字typename(或class),后面跟一個類型參數(shù)T,T是一個虛擬的類型名 ,表明他是一個類型名但并未指明具體類型。從而,在函數(shù)定義是用T來定義的變量a,b,c也是未確定的。當函數(shù)調(diào)用時,編譯器會根據(jù)實參的類型來確定T的類型。

class與typename作用相同,可以互換,但為了與類class區(qū)分,一般用typename。

需要注意的是,函數(shù)模板只適用于函數(shù)體相同,函數(shù)參數(shù)個數(shù)相同而數(shù)據(jù)類型不同的情況,如果參數(shù)個數(shù)不同,則不能使用函數(shù)模板。

二、類模板 1.與函數(shù)模板類似,有時,有兩個或多個類,其功能相同,僅僅是數(shù)據(jù)類型不同

如下面聲明了一個類,用來比較兩個整數(shù)的大小。

class Compare_int 
{
   public:
     Compare_int (int a,int b)//定義構(gòu)造函數(shù)
        {x=a;y=b;}
     int max()
     {return (x>y)?x:y;}
     int min()
     {return (x

但如果想對兩個浮點數(shù)作比較,還需要重新聲明一個類:

class Compare_float 
{
   public:
     Compare_float (float a,float b)//定義構(gòu)造函數(shù)
        {x=a;y=b;}
    float max()
     {return (x>y)?x:y;}
    float min()
     {return (x

顯然,這基本上是重復性的工作,所以,c++增加了template功能,用來減少重復。?

2.類模板

對于上面兩個類,可以聲明一個通用的模板,他可以有一個或多個虛擬的類型參數(shù)

template//聲明一個模板,虛擬類型名為numtype
class Compare

  {
       public:
         Compare(numtype a, numtype b)//定義構(gòu)造函數(shù)
           {x=a;y=b;}
          numtype max()
           {return (x>y)?x:y;}
          numtype min()
           {return (x

與前面Compare_int不同的是:1.聲明類模板要增加一行 template2.原有的類型名int換成虛擬類型參數(shù)名numtype

可以這樣說類模板是類的抽象,類是類模板的實例。

類模板的使用

類定義對象的方法:Compare_int com(4,7);? ,類模板定義對象與此類似,但不能直接寫Compare com(4,7);因為Compare只是類模板名,他不是一個具體的類,類模板中的類型numtype不是一個實際的類型,只是一個虛擬的類型,不能用來定義對象。因此,我們需要一個實際的類型名來取代虛擬類型 如下:

Comparecom(4,7);

不難看出,其一般形式為:類模板名<實際類型名>對象名(參數(shù))


總結(jié):可以這樣聲明和使用類模板

1:先寫出一個實際的類(如上面的Compare_int)

2:將此類準備改變的類型名(如int改為float)改成虛擬類型名(如上面的numtype)

3:在類聲明前加一行

template

4:用類模板定義對象

類模板名<實際類型名>對象名;

類模板名<實際類型名>對象名(實參表);

如:?

Comparecom;

Comparecom(3,7);

5:如果在類模板外定義成員函數(shù),應寫成類模板形式:

template

函數(shù)類型 類模板名<虛擬類型參數(shù)>::成員函數(shù)名(函數(shù)形參表){……}

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

文章名稱:c++模板-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://muchs.cn/article26/dejecg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、品牌網(wǎng)站建設電子商務、ChatGPT、網(wǎng)站內(nèi)鏈、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)