//SearchVect.h 的內容 #include "IntRange.h" template <class T> class SearchableVector : public SimpleVector<T> { public: // Constructor. SearchableVector(int s) : SimpleVector<T>(s) { } // Copy constructor. SearchableVector(const SearchableVector &); // Additional constructor. SearchableVector(const SimpleVector<T>&obj): SimpleVector<T>(obj) { } int findItem(T); }; template <class T> SearchableVector<T>::SearchableVector(const SearchableVector &obj): SimpleVector<T>(obj) { } template <class T> int SearchableVector<T>::findItem(T item) { for (int count = 0; count < this->size (); count++) { if (this->operator[] (count) == item) return count; } return -1; }
提示,這裡不再給出 SimpleVector.h 的程式碼,該程式碼可從《C++類別模板用法》一節中獲取。
現在使用該範例來仔細看一看從模板基礎類別派生一個類的方法。首先,必須向編譯器指出,我們正在基於另一個己經存在的類別範本定義一個新的類別範本,語句如下:template<class T> class SearchableVector : public SimpleVector<T> { //類的成員寫在此處 };這裡新定義的類別範本是 SearchableVector,而現有的基礎類別模板是 SimpleVector <T>。該類有 3 個建構函式。以下顯示的是第一個建構函式:
SearchableVector(int size) : SimpleVector<T>(size){ }
該建構函式被設計為動態分配一個T型別的 size 個元素的陣列,它通過呼叫基礎類別建構函式並給它傳遞形參 size 來完成。此建構函式將建立一個指定大小的陣列,並將所有元素初始化為 T 型別的預設值。該類還有另一個建構函式如下:SearchableVector(SimpleVector<T>&obj): SimpleVector<T>(obj){ }
它釆用一個基礎類別物件作為形參,其副本將被搜尋。建構函式只是將其形參傳遞給基礎類別複製建構函式。剩餘的一個建構函式是 SearchableVector 類的複製建構函式,如下所示:SearchableVector(SearchableVector<T>&obj): SimpleVector<T>(obj){ }
由於 SearchableVector 的初始化與 SimpleVector 的初始化相同,所以 SearchableVector 複製建構函式只是將其引數傳遞給它的基礎類別的複製建構函式。成員函數 findItem 釆用一個型別 T 的專案作為引數,並返回該專案在陣列中的位置。如果在陣列中找不到該專案,則返回值 -1。//This program demonstrates the SearchableVector template. #include <iostream> #include "searchvect.h" using namespace std; int main() { const int SIZE = 10; SearchableVector<int> intTable (SIZE); SearchableVector<double> doubleTable(SIZE); // Store values in the vectors for (int x = 0; x < SIZE; x++) { intTable[x] = (x * 2); doubleTable[x] = (x * 2.14); } // Display the values in the vectors cout << "These values are in intTable:n"; for (int x = 0; x < SIZE; x++) cout << intTable[x] << " "; cout << endl; cout << "These values are in doubleTable:n"; for (int x = 0; x < SIZE; x++) cout << doubleTable[x] << " "; cout << endl; // Now search for values in the vectors int result; cout << "Searching for 6 in intTable.n"; result = intTable.findItem(6); if (result == -1) cout << "6 was not found in intTable. n"; else cout << "6 was found at subscript " << result << endl; cout << "Searching for 12.84 in doubleTable.n"; result = doubleTable.findItem(12.84); if (result == -1) cout << "12.84 was not found in doubleTable.n"; else cout << "12.84 was found at subscript " << result << endl; return 0; }程式輸出結果:
These values are in intTable:
0 2 4 6 8 10 12 14 16 18
These values are in doubleTable
0 2.14 4.28 6.42 8.56 10.7 12.84 14.98 17.12 19.26
Searching :for 6 in intTable.
6 was found at subscript.3
Searching for 12.84 in doubleTable.
12.84 was found at subscript 6