jake1036

c++类模板学习

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

       






  

posted on 2011-05-14 20:06 kahn 阅读(8025) 评论(0)  编辑 收藏 引用 所属分类: c++学习总结


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理