C++ 函數模板一(函數模板定義)


//函數模板定義--數據類型做參數
#include<iostream>
using namespace std;

/*
函數模板聲明
1.函數模板定義由模板說明和函數定義組成,並且一個模板說明對應一個函數定義
2.模板說明的類屬參數必須在函數定義中至少出現一次
3.函數參數表中可以使用類屬類型參數,也可以使用一般類型參數
*/

/*
template關鍵字告訴c++編譯器現在要進行泛型編程
typename或者class告訴c++編譯器T是一個數據類型,不要進行語法檢查
typename和class完全可以互相替換 */
template<typename T>//也可以寫成template<class T>
void myswap(T &a, T &b){
    T c = a;
    a = b;
    b = c;
};
//void Print(T &a,T &b){
//    cout << "a=" << a << "\nb=" << b << endl;
//}
//報錯:一個模板說明只能對應一個函數定義,想再定義一個函數,必須再寫一個模板聲明

template<class T>
void Print(T &a, T &b){
    cout << "a=" << a << "\nb=" << b << endl;
}

//多參數的函數模板
template<typename T1,typename T2>
//這種定義當調用函數時就會報錯  MySort(a);
//模板說明的類屬參數必須在函數定義中至少出現一次
void MySort(T1 a){
    cout << "aaa" << endl;
}

template<typename T>
void Getnum(T a,int b){
    cout << "a=" << a << ";\nb="<<b << endl;
}

void main(){
    int a=1;
    int b = 2;
    //泛型編程函數的使用方法1---自動類型推導
    myswap(a, b);
    Print(a, b);
    //泛型編程函數的使用方法2---顯式具體類型調用
    myswap<int>(a, b);
    Print(a, b);
    //MySort(a);    報錯 : error C2783: “void MySort(T1)”: 未能為“T2”推導 模板 參數
    cout << "----------------" << endl;
    Getnum(a, 4);
    system("pause");
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM