1.C++兩種抽象方法(1)面向?qū)ο缶幊?/strong>
(2)泛型編程
2.泛型編程概念泛型編程(Generic Programming) 指在多種數(shù)據(jù)類型上皆可操作,。和面向?qū)ο缶幊滩煌?,它并不要求額外的間接層來調(diào)用函數(shù),而是使用完全一般化并可重復(fù)使用的算法,,算法效率與針對某特定數(shù)據(jù)類型而設(shè)計的算法相同,。 (1)概念(concepts)類型必須滿足的一組條件?;镜腸oncepts中有賦值,、默認構(gòu)造、相等比較,、小于判斷等,。 (2)模型化(modeling)當類型滿足這個條件,即為該concepts的一個model,。 如果能夠復(fù)制類型X的值,,或者賦給X對象一個新值的話,則類型X是Assignable的一個model,。 (3)強化(refinement)如果concept C2滿足concept C1的所有條件,,再加上其他額外條件,則C2是C1的強化(refinement),。
3.泛型編程實現(xiàn)(1)模板
(2)STLSTL(Standard Template Library,,標準模板庫) 是泛型編程思想的實現(xiàn),于1994年被納入C++標準程序庫,。STL是一種高效,、泛型、可交互操作的軟件組件,,巨大,,而且可以擴充,它包含很多計算機基本算法和數(shù)據(jù)結(jié)構(gòu),,而且將算法與數(shù)據(jù)結(jié)構(gòu)完全分離,,其中算法是泛型的,,不與任何特定數(shù)據(jù)結(jié)構(gòu)或?qū)ο箢愋拖翟谝黄稹?/p> STL以迭代器(Iterators)和容器(Containers)為基礎(chǔ),是一種泛型算法(Generic Algorithms)庫,,容器的存在使這些算法有東西可以操作,。STL包含泛型算法(algorithms)、泛型指針(iterators),、泛型容器(containers),、函數(shù)對象(function objects)。 迭代器(Iterators)是STL的核心,,它們是泛型指針,,是一種指向其他對象(objects)的對象,迭代器能夠遍歷由對象所形成的區(qū)間(range),。 迭代器一般分為五種:
4.泛型編程優(yōu)缺點(1)通用性強泛型算法是建立在語法一致性上,,運用到的類型集是無限的/非綁定的。 (2)效率高編譯期能確定靜態(tài)類型信息,,其效率與針對某特定數(shù)據(jù)類型而設(shè)計的算法相同,。 (3)類型檢查嚴靜態(tài)類型信息被完整的保存在了編譯期,編譯期發(fā)覺更多潛在的錯誤,。 (4)二進制復(fù)用性差泛型算法是建立在語法一致性上,,語法是代碼層面的,語法上的約定無法體現(xiàn)在二進制層面,。泛型算法實現(xiàn)的庫,,其源代碼基本上是必須公開的。而傳統(tǒng)的C庫全是以二進制形式發(fā)布的,。 |
|