問題:用c++語言實現求乙個數的平方。
分析:乙個數,可以是int、double、complex等,規則求數的平方"x*x"
偽**:sqrt(x)
return x * x;
實現一:提供一組用於求不同數字型別的平方函式。
int sqrtint(int x)
int sqrtdouble(double x)
// ...
實現二:上述一組函式,對不同的數字型別,有不同的函式名,挑戰了人的記憶能力,編碼也變得麻煩。可以採用c++的函式過載技術改進方案。
int sqrt(int x)
int sqrt(double x)
// ...
實現三:實現二的方案意味著型別越多,相同結構的**越多,導致大量的重複**,容易產生錯誤且難以維護。這裡可以採用c++裡的泛型程式設計技術對上述函式族進行引數泛化,即泛型引數。
templatet sqrt(t x)
從方案的變化過程可以看出泛型引數的第乙個優點:避免靜態型別語言中的**重複。
進一步分析實現三,泛型同樣對引數進行了操作方面的約束」x*x「,引數型別必須滿足乘法規則。即泛型引數的第二個優點:約束引數的操作行為。不滿足操作行為規則將會編譯失敗。
如下圖例子:
第三個優點:通過編譯器的靜態型別檢查,可以在編譯時保證型別的正確。
如下圖所示:
泛型程式設計之2
題 解釋一下什麼是泛型程式設計,泛型程式設計和c 及stl的關係是什麼?並且,你是怎麼在c 環境裡進行泛型程式設計的?美國某著名cpu生產公司面試題 答案 泛型程式設計是一種基於發現高效率演算法的最抽象表示的程式設計方法。也就是說,以演算法為起點並尋找能使其工作且有效率工作的最一般的必要條件集。令人...
泛型 泛型類 泛型方法 泛型擦除
1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...
《C 高階程式設計》之泛型 1建立泛型類
net自從2.0版本開始就支援泛型。閒話休提,馬上來看下非泛型的簡化鍊錶類,它可以包含任意型別的物件。linkedlistnode.cs中 在鍊錶中,乙個元素引用另乙個元素,所以必須建立乙個類,將其封裝在鍊錶中,並引用下乙個物件。1 public class linkedlistnode27 8pu...