C++代碼更多地靠第三方的庫來實現這些功能,因為C++是一個國際標准,要在C++中加入這些語言之外的、面向應用的特性還需要很長一段路要走,希望本文能教會你更多東西。。
我們已經學過重載,對重載函數而言,C++的檢查機制能通過函數參數的不同及所屬類的不同,正確的調用重載函數。
例如,為求兩個數的最大值,我們定義max()函數需要對不同的數據類型分別定義不同重載版本。
- int max(int x,int y);
- {
- return(x>y)?x:y ;
- }
- float max( float x,float y)
- {
- return (x>y)? x:y ;
- }
- double max(double x,double y)
- {
- return (c>y)? x:y ;
- }
現在,我們再重新審視上述的max()函數,它們都具有同樣的功能,即求兩個數的最大值,能否只寫一套代碼解決這個問題呢?這樣就會避免因重載函數定義不全面而帶來的調用錯誤。
為解決上述問題C++代碼引入模板機制,模板定義:模板就是實現代碼重用機制的一種工具,它可以實現類型參數化,即把類型定義為參數,從而實現了真正的代碼可重用性。
模板分類:模板分為函數模板和模板函數,當編譯系統發現了一個對應的函數調用時,將根據實參的類型來確認是否匹配函數模板中對應的形參然後生成一個重載函數,稱該重載函數為模板函數。
函數模板與模板函數的區別: 二者區別可以類比 類與對象的區別。函數模板與類相似是模板的定義,而模板函數與對象相似,是函數模板的實例,具有程序代碼,占用內存空間。
同樣,在說明了一個類模板後,也可以創建類模板的實例即生成模板類。類模板與模板類的區別是:類模板是模板的定義,不是一個實在的類,模板類才是實實在在的類。
程序分析:main()函數中定義了兩個整型變量n1 , n2 兩個雙精度類型變量d1 , d2然後調用min( n1, n2); 即實例化函數模板T min(T x, T y)其中T為int型,求出n1,n2中的最小值.同理調用min(d1,d2)時,求出d1,d2中的最小值。