c++模板類
1 模板類和重載函數(shù)一起使用
兩者一起使用時,先考慮重載函數(shù),后考慮模板類,如過再找不到,就考慮類型轉換,可能會帶來精度的變化。
#include <iostream>
using namespace std ;
//函數(shù)模板
template <class T>
const T MAX(T a , T b)

{
printf("%s\n" , "template") ;
return (a > b) ? a : b ;
}
int MAX(int x , int y)

{
printf("%s\n" , "int int" );
return (x > y) ? x : y ;
}
int MAX(char x , int y)

{
printf("%s\n" , "char int" );
return (x > y) ? x : y ;
}
int MAX(int x , char y)

{
printf("%s\n" , "int char" );
return (x > y) ? x : y ;
}

int main()

{
int a = 3 , b = 5 ;
char x = 'x' ;
double c = 3.4 ;
cout<<MAX(a , b)<<endl ; //調用重載函數(shù)
cout<<MAX(c , d)<<endl ; //無對應的重載函數(shù),則調用模板
cout<<MAX(a , x)<<endl ; //重載函數(shù)
cout<<MAX(x , a)<<endl ; //重載函數(shù)
cout<<MAX(c , a)<<endl ;
cout<<MAX(a) ;
system("pause") ;
return 0 ;
}

2 類模板
(1)類模板的具體格式
template <class T>
class A
{
}
在類定義體外定義的成員函數(shù),應該使用函數(shù)模板。

/**//*
類模板,但是在類外定義成員函數(shù)的時候,需要使用函數(shù)模板


*/
#include <iostream>
using namespace std ;
template <class T>
class Base

{
public :
T a ;
Base(T b)

{
a = b ;
}

T getA()
{return a ;} //類內定義
void setA(T c);
} ;
template <class T> //模板在類外的定義
void Base<T>::setA(T c)

{
a = c ;
}
int main()

{
Base <int>b(4) ;
cout<<b.getA() ;
Base <double> bc(4) ;
bc.setA(4.3) ;
cout<<bc.getA() ;
system("pause") ;
return 0 ;
}

注意成員函數(shù)在類外定義的情況。
3 模板類
主要指的是 STL 模板類