c++模板类
1 模板类和重载函数一起使用
两者一起使用时,先考虑重载函数,后考虑模板类,如过再找不到,就考虑类型转换,可能会带来精度的变化。
#include <iostream>
using namespace std ;
//函数模板
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 ; //调用重载函数
cout<<MAX(c , d)<<endl ; //无对应的重载函数,则调用模板
cout<<MAX(a , x)<<endl ; //重载函数
cout<<MAX(x , a)<<endl ; //重载函数
cout<<MAX(c , a)<<endl ;
cout<<MAX(a) ;
system("pause") ;
return 0 ;
}

2 类模板
(1)类模板的具体格式
template <class T>
class A
{
}
在类定义体外定义的成员函数,应该使用函数模板。

/**//*
类模板,但是在类外定义成员函数的时候,需要使用函数模板


*/
#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 ;
}

注意成员函数在类外定义的情况。
3 模板类
主要指的是 STL 模板类