C++类模板学习

原文:http://www.cppblog.com/jake1036/archive/2011/05/14/146391.html 

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 模板类

你可能感兴趣的:(C++)