日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模板类 Template Classes 以及模板类编译时的处理

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模板类 Template Classes 以及模板类编译时的处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


??????? 我們可以建立template classes,使它們能夠神奇地操作任何類型的資料。下面這個例子是讓CThree 類別儲存三個成員變量,成員函數Min 傳回其中的最小值,成員函數Max 則傳回其中的最大值。我們把它設計為template class,以便這個類別能適用于各式各樣的數據類型:

template <class T>class CThree{public :CThree(T t1, T t2, T t3);T Min();T Max();private:T a, b, c;};

????? 語法還不至于太稀奇古怪,把T 看成是大家熟悉的int 或float 也就是了。下面是成員函數的定義:

template <class T>T CThree<T>::Min(){T minab = a < b ? a : b;return minab < c ? minab : c;}template <class T>T CThree<T>::Max(){T maxab = a < b ? b : a;return maxab < c ? c : maxab;}template <class T>CThree<T>::CThree(T t1, T t2, T t3) : a(t1), b(t2), c(t3){return;}


??????? 這里就得多注意些了。每一個成員函數前都要加上template <class T>,而且類別名稱應該使用CThree<T>。

//以下是template class 的使用方式:#include <iostream.h>void main(){CThree<int> obj1(2, 5, 4);cout << obj1.Min() << endl;cout << obj1.Max() << endl;CThree<float> obj2(8.52, -6.75, 4.54);cout << obj2.Min() << endl;cout << obj2.Max() << endl;CThree<long> obj3(646600L, 437847L, 364873L);cout << obj3.Min() << endl;cout << obj3.Max() << endl;}

執行結果如下:
? 2 5
-6.75
8.52
364873
646600

???? 對程序員而言C++ templates 可說是十分容易設計與使用,但對于編譯器和聯結器而言卻是一大挑戰。編譯器遇到一個template 時,不能夠立刻為它產生機器碼,它必須等待,直到template 被指定某種類型。從程序員的觀點來看,這意味著template function 或template class 的完整定義將出現在template 被使用的每一個角落,否則,編譯器就沒有足夠的信息可以幫助產生目的碼。當多個源文件使用同一個template 時,事情更趨復雜。
???? 隨著編譯器的不同,掌握這種復雜度的技術也不同。有一個常用的技術,Borland 稱之為Smart,應該算是最容易的:每一個使用Template 的程序代碼的目的檔中都存在有template碼,聯結器負責復制和刪除。
???? 假設我們有一個程序,包含兩個源文件A.CPP 和B.CPP,以及一個THREE.H(其內定義了一個template 類別,名為CThree)。A.CPP 和B.CPP 都包含THREE.H。如果A.CPP以int 和double 使用這個template 類別,編譯器將在A.OBJ 中產生int 和double 兩種版本的template 類別可執行碼。如果B.CPP 以int 和float 使用這個template 類別,編譯器將在B.OBJ 中產生int 和float 兩種版本的template 類別可執行碼。即使雖然A.OBJ 中已經有一個int 版了,編譯器沒有辦法知道。然后,在聯結過程中,所有重復的部份將被刪除。









總結

以上是生活随笔為你收集整理的模板类 Template Classes 以及模板类编译时的处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。