C++ template
阿新 • • 發佈:2020-07-17
1 函式模板
#include <iostream> using namespace std; template <typename T> T square(T a) { return a * a; } int main(void) { cout << square<int>(3) << endl; // 可以顯式告訴編譯器是什麼型別,也可以讓編譯器推斷 cout << square(3) << endl; cout << square<char>(9.3) << endl; // 結果是Q ,81的ASCII碼 cout << square<int>(9.3) << endl; // 結果81 cout << square(5.5) << endl; // 30.25 編譯器自己推斷為double }
2 類模板
#include <iostream> using namespace std; template <typename T> T square(T a) { return a * a; } template<typename T> class win { private: T arr[10]; int size; public: win():size(0) {cout << "creater" << endl; } ~win(){}; int getSize()const{ return size; } T get(int i)const{ return arr[i];} void push(T x) { arr[size] = x; size++;} void print()const; }; template<typename T> void win<T>::print()const{ for (int i = 0; i < size; i++) { cout << arr[i] << endl; } } template <typename T> win<T> operator*(const win<T> &left, const win<T> &right) { win<T> ret; for( int i = 0 ; i < right.getSize(); i++) { ret.push(left.get(i) * right.get(i)); } return ret; } int main(void) { win<int> a; a.push(1); a.push(2); a.push(3); a.push(4); a.push(5); a.push(6); a.print(); a = square(a); a.print(); }
a = square(a);這處會先呼叫函式模板然後由於定義了類win的乘法,呼叫operator *