<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
泛型程式設計:不再是針對某種型別,能適應廣泛的型別,跟具體的型別無關的程式碼
如何實現一個通用的交換函數呢?
void Swap(int& left, int& right) { int temp = left; left = right; right = temp; } void Swap(double& left, double& right) { double temp = left; left = right; right = temp; }
使用函數過載雖然可以實現,但是有一下幾個不好的地方: 1. 過載的函數僅僅是型別不同,程式碼複用率比較低,只要有新型別出現時,就需要使用者自己增 加對應的函數 2. 程式碼的可維護性比較低,一個出錯可能所有的過載均出錯
因此我們需要告訴編譯器一個模子,讓編譯器根據不同的型別利用該模子來生成程式碼
模板分為:函數模板,類別範本
函數模板代表了一個函數家族,該函數模板與型別無關,在使用時被引數化,根據實參型別產生 函數的特定型別版本。
template<typename T>
返回值型別 函數名(參數列){}
說明:
1.template<class T> 和 template<typename T>在此暫時認為一樣,template<struct T>是 錯誤的 ,沒有這種寫法
2.T是type的縮寫,T不一定寫T,可以寫任意字母,比如X,t ……但是習慣寫為T
舉例:
template<typename T> //或template<class T> void Swap(T& left, T& right) { T tmp = left; left = right; right = tmp; } int main() { int a = 0, b = 1; double c = 2.2, d = 3.3; swap(a, b); swap(c, d); return 0; }
swap(a, b);
和swap(c, d);
呼叫的是同一個函數嗎?
答:不是同一個。底層組合可以看出不是同一個,如果偵錯時發現走的是同一個函數,其實是編譯器的優化導致。
實際上以後swap函數都不用自己寫了,庫中有模板,直接用就行
在編譯器編譯階段 ,對於模板函數的使用, 編譯器需要根據傳入的實參型別來推演生成對應型別 的函數 以供呼叫。比如: 當用 double 型別使用函數模板時,編譯器通過對實參型別的推演,將 T 確定為 double 型別,然後產生一份專門處理 double 型別的程式碼 ,對於字元型別也是如此。 模板的範例化:
類別範本的定義格式
template < class T1 , class T2 , ..., class Tn >
class 類別範本名
{
// 類內成員定義
};
舉例:呼叫 Stack<int> st1; 時,用int替換模板中的T。呼叫 Stack<double> st1; 時,用double替換模板中的T
// 類別範本 template<class T> class Stack { public: Stack(int capacity = 0) { _a = new T[capacity]; _capacity = capacity; _top = 0; } ~Stack() { cout << "~Stack()" << endl; delete[] _a; _capacity = 0; _top = 0; } void Push(const T& x) {} private: T* _a; int _top; int _capacity; }; int main() { Stack<int> st1; // int st1.Push(1); Stack<double> st2; // double st2.Push(2.2); return 0; }
到此這篇關於C++深入瞭解模板的使用的文章就介紹到這了,更多相關C++模板內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45