2.類模板與模板類
知識點:
1.函式模板呼叫時不需要顯式指定型別,系統自動匹配引數型別,若沒有合適的,會進行報錯。
2.類模板使用需要顯式指定型別。
3. 返回值和引數的型別一致。將函式賦值給函式指標之時,尤其需要注意這個問題。
4. 函式模板是由編譯器根據呼叫型別例項化為可執行的函式。
5. 函式模版可以針對函式引數型別不同/返回值型別作為模版引數。
6. 類模板可以針對資料成員、成員函式、繼承的基類型別作為模板引數。
其他的都比較常見,但是類模板可以針對繼承的基類型別作為模板引數這個還沒有看到過。參見ouge的回答,或1.1節。
題目:定義函式模板add,以下說法正確的有:()
//失敗,需要顯示定義為pfun2 = add
pfun1 = add
pfun3 = add
// 失敗,add無法正確推導
pfun4 = add
//失敗,函式指標不可賦值
分析:根據本文開頭知識點部分1-2可見:
1. pfun2 = add的錯誤提示不是pfun2 = add,而是 no matches converting function 『add』 to type 『const int (*)(int&, int&);
2. pfun1的引數和返回值一致,可以自動推導,正確賦值;
3. pfun3 = add賦值失敗,失敗原因和a一樣;
4. pfun4 = add顯示的指定型別t為int型,賦值正確。
模板類繼承一文中描述了:
模板類的繼承包括四種:這裡著重針對第四類,給出乙個例子:1. (普通類繼承模板類)
2. (模板類繼承了普通類(非常常見))
3. (類模板繼承類模板)
class basea
}; templateclass derived:public t
類模板的重點是模板。表示的是乙個模板,專門用於產生類的模子;注意的知識點:模板類是類模板的乙個例項。
1. 類模板的成員函式一定都是函式模板,當模板例項化之後,使用的成員函式也例項化了。但是,沒有用到的函式模板不會被例項化。
2.不是類模板也可以存在函式模板,諸如下述**:
class fooo
};int main(int argc, char * * argv)
ACM自用模板
include include include include include include include include include include include include includeusing namespace std define ll long long define ...
自用模板 數字dp
include includeint dp 10 3 dp i 0 為位數小於等於i且不含62也不含4的數字的個數 dp i 1 為位數為i且首位為2且不含62也不含4的數字的個數 dp i 2 為位數小於等於i且含62或4的數字的個數 int digit 10 void er int wei in...
最短路模板(自用)
摘自 floyd演算法是多源最短路演算法,複雜度最高 n 3 通常用在點比較少的起點不固定的問題中。能解決負邊 負權 但不能解決負環。dijkstra演算法是單源最短路演算法,最常用時間複雜度 n 2 優化後可以達到 nlogn 不能解決負邊問題,稀疏圖需要耗費比較多的空間。spfa演算法適合稀疏圖...