C++筆記 第五十八課 類模板的概念和意義---狄泰學院
阿新 • • 發佈:2018-12-01
如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習C++編譯環境:Linux
第五十八課 類模板的概念和意義
1.思考
在C++中是否能夠將泛型的思想應用於類?
2.類模板
一些類主要用於儲存和組織資料元素
類中資料組織的方式和資料元素的具體型別無關
如:陣列類,連結串列類,Stack類,Queue類,等
C++中將模板的思想應用於類,使得類的實現不關注資料元素的具體型別,而只關注類所需要實現的功能。
C++中的類模板
以相同的方式處理不同的型別
在類宣告前使用template進行標識
用於說明類中使用的泛指型別T
類模板的應用
只能顯示指定具體型別,無法自動推導
使用具體型別定義物件
宣告的泛指型別T可以出現在類模板的任意地方
編譯器對類模板的處理方式和函式模板相同
從類模板通過具體型別產生不同的類
在宣告的地方對類模板程式碼本身進行編譯—第一次編譯
在使用的地方對引數替換後的程式碼進行編譯—第二次編譯
58-1 類模板初探
#include<iostream> #include<string> using namespace std; template<typename T> class Operator { public: T add(T a, T b) { return a + b; } T minus(T a, T b) { return a - b; } T multiply(T a, T b) { return a * b; } T divide(T a, T b) { return a / b; } }; string operator-(string& l, string& r) { return "Minus"; } int main() { Operator<int> op1; cout << op1.add(1,2) << endl; Operator<string> op2; cout << op2.add("D.T.", "Software") << endl; cout << op2.minus("D.T.", "Software") << endl; return 0; } 執行結果 3 D.T.Software Minus
類模板的工程應用–只是工程中應用的規則,經驗做法,不是C++規則
類模板必須在標頭檔案中定義
類模板不能分開實現在不同的檔案中
類模板外部定義的成員函式需要加上模板<>宣告
58-2 模板類的工程應用
Operator.h #ifndef _OPERATOR_H_ #define _OPERATOR_H_ template<typename T> class Operator { public: T add(T a, T b); T minus(T a, T b); T multiply(T a, T b); T divide(T a, T b); }; template<typename T> T Operator<T>::add(T a,T b) { return a + b; } template<typename T> T Operator<T>::minus(T a,T b) { return a - b; } template<typename T> T Operator<T>::multiply(T a,T b) { return a * b; } template<typename T> T Operator<T>::divide(T a,T b) { return a / b; } #endif
58-2.cpp
#include<iostream>
#include<string>
#include "Operator.h"
using namespace std;
int main()
{
Operator<int> op1;
cout << op1.add(1,2) << endl;
cout << op1.minus(5,6) << endl;
cout << op1.multiply(4,5) << endl;
cout << op1.divide(10,5) << endl;
return 0;
}
執行結果
3
-1
20
2
小結
泛型程式設計的思想可以應用於類
類模板以相同的方式處理不同型別的資料
類模板非常適用於編寫資料結構相關的程式碼
類模板在使用時只能顯示指定型別