/* 类模板特化之数组.cpp */ #include #include using namespace std; #define MAXSIZE 5 template class Array { public: Array() { for (int i = 0; i < MAXSIZE; i++) { array[i] = 0; } } T &operator[](int i); void Sort(); private: T array[MAXSIZE]; }; template T &Array::operator[](int i) { if (i < 0 || i > MAXSIZE - 1) { cout << "数组下标越界!" << endl; exit(0); } return array[i]; } template void Array::Sort() { int p, j; for (int i = 0; i < MAXSIZE - 1; i++) { p = i; for (j = i + 1; j < MAXSIZE; j++) { if (array[p] < array[j]) p = j; } T t; t = array[i]; array[i] = array[p]; array[p] = t; } } template <> void Array::Sort() { int p, j; for (int i = 0; i < MAXSIZE - 1; i++) { p = i; for (j = i + 1; j < MAXSIZE; j++) { if (strcmp(array[p], array[j]) < 0) p = j; } char *t = array[i]; array[i] = array[p]; array[p] = t; } } int main(int argc, char const *argv[]) { Array a1; Array b1; a1[0] = 1; a1[1] = 23; a1[2] = 6; a1[3] = 3; a1[4] = 9; a1.Sort(); for (int i = 0; i < 5; i++) cout << a1[i] << "\t"; cout << endl; b1[0] = "x1"; b1[1] = "ya"; b1[2] = "ad"; b1[3] = "be"; b1[4] = "bc"; b1.Sort(); for (int i = 0; i < 5; i++) cout << b1[i] << "\t"; cout << endl; return 0; }