程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++函數模板

C++函數模板

編輯:C++入門知識

定義模板:

template<typename T>& max(T & a, T & a < b ?

這個模板定義指定了一個“返回兩個值中最大者”的函數家族,這兩個值通過函數參數a , b傳遞給函數模板的,而參數的類型還沒有確定,用模板參數T來代替。
其中,typename可以用class來代替,但是建議使用typename

#include<iostream><>
 <typename T>& max(T & a, T & a < b ? i = <<<<::max(, i)<< f1 =  f2 = <<<<::max(f1, f2)<< s1 =  s2 = <<<<::max(s1, s2)<< 

實參的選擇:

 模板參數

template<typename T1, typename T2>& a, T2 & a < b ?, );

可以引入第三個模板實參類型,來定義函數模板的返回類型:

template<typename T1, typename T2, typename RT>& a, T2 &<, , >(, );

行得通,但是很麻煩

template<typename RT, typename T1, typename T2>& a, T2 &<>(, );  

 重載函數模板

#include<iostream><>
  & max( & a,  & a < b ?<typename T>& max(T & a, T & a < b ?<typename T>& max(T & a, T & b, T &<<::max(, , )<<endl;       
    cout<<::max(, )<<endl;       
    cout<<::max(, )<<endl;        
    cout<<::max(, )<<endl;           
    cout<<::max<>(, )<<endl;         
    cout<<::max<>(, )<<endl;   
    cout<<::max(, )<<endl;       
 

#include<iostream><>
 
template<typename T>& max(T & a, T & a < b ?
template<typename T>* & max(T* & a, T* & a < b ?
inline  * & max( * & a,  * & *a < *b ?= = 
     
     s =  t = <<::max(s, t)<<endl;   

    * p1 = &* p2 = &<<::max(p1, p2)<<endl;  

     * s1 =  * s2 = <<::max(s1, s2)<<endl;  
 

以上在所有實現重載裡面,都是通過引用來傳遞每個實例的,但是一般而言,在重載函數模板的時候,最好只是改變那些需要改變的內容,應該把改變限制在以下兩個方面:

#include<iostream><>
 
template<typename T>& max(T & a, T & a < b ?
inline  * max( * a,  * strcmp(a, b) <  ?
template<typename T>& max(T & a, T & b, T &<<::max(, , )<<endl; 

     * s1 =  * s2 =  * s3 = <<::max(s1, s2, s3)<<endl; 
 

錯誤在於:如果對3個C-string調用max,則語句return max(max(a, b), c);將產生錯誤

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved