1.函數模板與普通函數的區別:html
普通函數能夠進行自動類型轉化,而函數模板不能夠。函數
舉個例子spa
//函數模板 template<class T> void show(T a,T b){ cout<<a*b<<endl; } //執行 show(1,'a');//編譯器報錯
//普通函數 void show(int a,int b){ cout<<a*b<<endl; } //執行 show(1,'a'); //編譯成功 執行後顯示97
雖然函數模板能夠自動識別類型,可是一旦識別以後,後面的T都必須替換成第一個類型,並且不能夠進行強制類型轉換。code
可是普通函數,雖然指定好了數據類型,可是能夠進行強制類型轉換htm
2.類模板和函數模板調用的區別blog
函數模板不須要顯式指定類型就能夠調用,可是類模板必須顯式指定數據類型才能夠調用內存
//假設定義了一個類模板 Person Person<int> p(10); //假設定義了一個函數模板 saying saying a(10); //函數模板不須要顯式指定數據類型,由於能夠自動識別
3.基類爲模板類的派生類怎麼寫?get
必需要顯式指定基類的數據類型編譯器
//基類 template <class T> class Foundation{ T size; public: Foundation(T s):(size(s)); } //派生類 class Ki:public Foundation<int>{ //必需要顯式指定 否則編譯器不知道如何分配內存 public:
Ki(int a):Foundation(a);
}
4.類模板較爲規範的寫法io
一個類Person
應當在Person.h中定義類模板,聲明模板內函數。
而函數在Person.hpp中實現
5.類模板中的友元函數該如何寫?
https://www.cnblogs.com/kiik/p/how_to_coding_friend_function_in_cpp_template_class.html