小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

“模板”學(xué)習(xí)筆記(1)

 My鏡像站 2011-12-26

====================C++中引出模板的原因====================

      我們大家都知道,C++給我們提供了眾多的數(shù)據(jù)類型,比如說整型、浮點(diǎn)型、雙精度型、布爾型等等。而且C++還為我們提供了一種函數(shù)重載的方式,即函數(shù)名 相同,但是類型不同,那么也可以被C++編譯器所認(rèn)識(shí)到,進(jìn)而可以輸出不同的結(jié)果。下面,我們以一個(gè)程序?yàn)槔齺碚f明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
int sum(int a,int b);//兩個(gè)整型變量相加
double sum(double a,double b);//兩個(gè)雙精度型變量相加
float sum(float a,float b);///兩個(gè)浮點(diǎn)型型變量相加
 
int sum(int a,int b)
{
    return a+b;
}
 
double sum(double a,double b)
{
    return a+b;
}
 
float sum(float a,float b)
{
    return a+b;
}
 
int main()
{
    int x=1,y=2;
    cout<<"整型變量的值為:"<<x<<" "<<y<<endl;
    cout<<"相加的結(jié)果為:"<<sum(x,y)<<endl;
    double l=1.11111f,m=2.22222f;
    cout<<"雙精度型變量的值為:"<<l<<" "<<m<<endl;
    cout<<"相加的結(jié)果為:"<<sum(l,m)<<endl;
    float p=1.2,q=2.3;
    cout<<"浮點(diǎn)型變量的值為:"<<p<<" "<<q<<endl;
    cout<<"相加的結(jié)果為:"<<sum(p,q)<<endl;
    return 0;
}

      在上面這個(gè)程序的第4、5和6行,我們分別重載了sum()函數(shù),這三個(gè)sum()函數(shù)的功能是完全一樣的,都是返回一個(gè)兩數(shù)之和。但是我們注意到,每個(gè) sum()函數(shù)的類型不一樣,這樣,在主程序中輸入不同的參數(shù)時(shí),編譯器會(huì)自動(dòng)調(diào)用與之類型匹配的sum()函數(shù)輸出結(jié)果。程序運(yùn)行的結(jié)果如下:

      上面這個(gè)程序雖然實(shí)現(xiàn)重載sum()函數(shù)達(dá)到對(duì)每種不同類型的參數(shù)的響應(yīng),但是,程序十分臃腫,一個(gè)小小的相加程序居然用了35行!這是不被接受的。那么我們不禁要想一想了,有沒有什么辦法能夠替代這種冗長的程序呢?

      答案其實(shí)就是運(yùn)用模板!有了模板,我們就不需要重載了,接下來我們同樣以這個(gè)相加的程序來作為例子說明下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
template<class ElementType>//聲明模板類型
 
ElementType sum(ElementType a,ElementType b)
{
    return a+b;
}
 
int main()
{
    int x=1,y=2;
    cout<<"整型變量的值為:"<<x<<" "<<y<<endl;
    cout<<"相加的結(jié)果為:"<<sum(x,y)<<endl;
    double l=1.11111f,m=2.22222f;
    cout<<"雙精度型變量的值為:"<<l<<" "<<m<<endl;
    cout<<"相加的結(jié)果為:"<<sum(l,m)<<endl;
    float p=1.2,q=2.3;
    cout<<"浮點(diǎn)型變量的值為:"<<p<<" "<<q<<endl;
    cout<<"相加的結(jié)果為:"<<sum(p,q)<<endl;
    return 0;
}

  呵呵,直觀上這個(gè)程序就比剛剛那個(gè)簡(jiǎn)潔,只有22行。下面我們來認(rèn)真分析一下這個(gè)程序到底說了什么。首先我們可以看到,在程序的第3行,我們就聲明了一個(gè)模板類型ElementType。這就是模板的聲明格式,如下:

template<class Type1,class Type2>

  template是聲明模板的關(guān)鍵字,尖括號(hào)中的class表示后面跟著的參數(shù)為自定義的模板類型,上面我們定義的類型為Type1和Type2。應(yīng)該特別注意的是,模板聲明之后不加;號(hào)!?。?/p>

      之后在程序的5到8行我們用自定義的類型ElementType創(chuàng)建了一個(gè)模板函數(shù)。函數(shù)模板說白了就是一個(gè)模子,用這個(gè)模子我們就可以創(chuàng)建出許多功能相 同、參數(shù)類型和返回值不同的函數(shù),從而這樣就實(shí)現(xiàn)了代碼的重用~~~在這個(gè)函數(shù)中,我們并沒有為sum()函數(shù)提供具體的參數(shù)類型,只用 ElementType來代替。這樣編譯器就會(huì)根據(jù)實(shí)際傳遞進(jìn)來的類型和我們自定義的函數(shù)模板來創(chuàng)建sum()函數(shù)。由于這種工作分別在程序的第14行、 17行和20行被執(zhí)行了3次,所以說sum()函數(shù)被重載了3次,以適應(yīng)不同的類型的數(shù)據(jù)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多