前言
永遠記住,編寫代碼的宗旨在于簡單明了,不要使用語言中的冷僻特性,耍小聰明,重要的是編寫你理解的代碼,理解你編寫的代碼,這樣你可能會做的更好。
前言
永遠記住,編寫代碼的宗旨在于簡單明了,不要使用語言中的冷僻特性,耍小聰明,重要的是編寫你理解的代碼,理解你編寫的代碼,這樣你可能會做的更好。
1998年,國際C++標準正式通過,標準化對C++最重要的貢獻是:對"強大的抽象概念"給于更有力的支持,以降低軟件的復雜度,C++提供了二種功能強大的抽象方法:面向對象編程與泛型編程。面向對象編程大家一定很熟悉了,這里就不再哆嗦了。提到泛型編程(Generic Programming),有的人可能還不太熟悉,但是提到STL,你就一定會有所耳聞了。STL(Standard Template Library,標準模板庫) 其實就是泛型編程的實現品,STL是由Alexander Stepanov(STL之父)、David R Musser和Meng Lee三位大師共同發展,于1994年被納入C++標準程序庫。STL雖然加入C++標準庫的時間相對較晚,但它卻是C++標準程序庫中最具革命性的部分,同時也是C++標準程序庫中最重要的組成部分。由于新的C++標準庫中幾乎每一樣東西都是由模板(Template)構成的,當然,STL也不會例外。所以,在這里有必要先概要說明一下模板的有關概念。
模板概念
通過使用模板可以使程序具有更好的代碼重用性。記住,模板是對源代碼進行重用,而不是通過繼承和組合重用對象代碼,當用戶使用模板時,參數由編譯器來替換。模板由類模板和函數模板二部分組成,以所處理的數據類型的說明作為參數的類就叫類模板,而以所處理的數據類型的說明作為參數的函數叫做函數模板。模板參數可以由類型參數或非類型參數組成,類型參數可用class和typename關鍵字來指明,二者的意義相同,都表示后面的參數名代表一個潛在的內置或用戶定義的類型,非類型參數由一個普通參數聲明構成。下面是類模板和函數模板的簡單用法:
template<class T1, int Size>
class Queue // 類模板,其中T1為類型參數,Size為非類型參數
{
public:
explicit Queue():size_(Size){}; // 顯式構造,避免隱式轉換
……
template<class T2> void assign(T2 first,T2 last); // 內嵌函數模板
private:
T* temp_;
int size_;
}
// 類模板中內嵌函數模板Compare的外圍實現(如在Queue類外實現)
template<class T1,int Size> template<class T2>
void Queue<T1,Size>::assign (T2 first,T2 last) {};
// 模板的使用方法
int ia[4] = {0,1,2,3};
Queue<int, sizeof(ia)/sizeof(int)> qi;
qi.assign(ai,ai+4);
泛型編程