免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

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

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

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

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行!這是不被接受的。那么我們不禁要想一想了,有沒有什么辦法能夠替代這種冗長(zhǎng)的程序呢?

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

 

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

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
怎么樣才能更好的掌握面向?qū)ο缶幊趟枷耄╫op)啊?
匿名函數(shù)Lambda認(rèn)識(shí)一下
C++模板:函數(shù)模板、類模板、模板與繼承
C++函數(shù)模板
C++ errorC2783 未能推導(dǎo)模板參數(shù)
c++模板詳解
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服