include iostream include string using namespace std template

  • Slides: 21
Download presentation

類別樣板 範例 #include <iostream> #include <string> using namespace std; template <class T> class my.

類別樣板 範例 #include <iostream> #include <string> using namespace std; template <class T> class my. TClass { public: void display(T n) { a = n; cout << a << endl; } T a; }; int main() { my. TClass<int> a; my. TClass<double> x; a. display(10); x. display(10. 4); return 0; } 15

類別樣板 範例 #include <iostream> #include <string> using namespace std; template <class T 1, class

類別樣板 範例 #include <iostream> #include <string> using namespace std; template <class T 1, class T 2> class my. TClass { public: void display(T 1 n, T 2 ch) { a = n; b = ch; cout << a << " " << b << endl; } T 1 a; T 2 b; }; int main() { my. TClass<int, char> a; my. TClass<double, double> x; a. display(10, 'A'); x. display(10. 4, 20. 5); return 0; } 16

利用樣板類別傳遞非型態樣板參數 在使用樣板類別建立物件時,若樣板參數使用非 型態值時,在建立物件時會把該參數當成常數使 用。 #include <iostream> #include <string> using namespace std; template <class T,

利用樣板類別傳遞非型態樣板參數 在使用樣板類別建立物件時,若樣板參數使用非 型態值時,在建立物件時會把該參數當成常數使 用。 #include <iostream> #include <string> using namespace std; template <class T, int SIZE> class My. Class { public: My. Class(T n) { int i; for(i=0; i<SIZE; i++) data[i] = n; } void display() { int i; for(i=0; i<SIZE; i++) cout << data[i] << " "; cout << endl; } private: T data[SIZE]; }; int main() { My. Class<string, 5> a("Hello"); My. Class<int, 2> b(0); a. display(); b. display(); return 0; } 19

部份特殊化 用一個通用型的樣板以宣告特殊情形的樣板,特 殊情形的樣板參數指明採用已宣告之資料型態。 對編譯器而言,特殊化樣板是添加在通用型樣板 之下的特殊適用條例,並不是一個新樣板。 編譯器視實際的參數型態決定援引一般條例或特 殊條例。 #include <iostream> #include <string> using namespace std;

部份特殊化 用一個通用型的樣板以宣告特殊情形的樣板,特 殊情形的樣板參數指明採用已宣告之資料型態。 對編譯器而言,特殊化樣板是添加在通用型樣板 之下的特殊適用條例,並不是一個新樣板。 編譯器視實際的參數型態決定援引一般條例或特 殊條例。 #include <iostream> #include <string> using namespace std; template <class T> class My. TClass { public: My. TClass(T n) { data = n; } void display() { cout << "other: " << data << endl; } private: T data; }; template <> class My. TClass<int> { public: My. TClass(int n){ data = n; } void display() { cout << "int: " << data << endl; } private: int data; }; int main() { My. TClass<string> a("hello"); My. TClass<int> b(2); a. display(); b. display(); return 0; } 20

原型之函式成員特殊化 原型的方法(函式成員)特殊化。特殊化的原型方法 不可以寫在類別樣板的宣告中。語法是以套用類 別樣式之敘述代替函式成員的類別範圍,且樣板 參數值須為已宣告之資料型態。 #include <iostream> using namespace std; template <class T> class

原型之函式成員特殊化 原型的方法(函式成員)特殊化。特殊化的原型方法 不可以寫在類別樣板的宣告中。語法是以套用類 別樣式之敘述代替函式成員的類別範圍,且樣板 參數值須為已宣告之資料型態。 #include <iostream> using namespace std; template <class T> class my. TClass { public: void display(T b); }; void my. TClass<int>: : display(int b) { cout << "int: " << b << endl; } void my. TClass<double>: : display(double b) { cout << "double: " << b << endl; } template <class T> void my. TClass<T> : : display(T b) { cout << "other: " << b << endl; } int main() { my. TClass<int> a; my. TClass<double> b; my. TClass<char> c; a. display(10); b. display(1. 2); c. display('a'); return 0; } 21