Presentation is loading. Please wait.

Presentation is loading. Please wait.

樣版.

Similar presentations


Presentation on theme: "樣版."— Presentation transcript:

1 樣版

2 本章重點 13-1 樣板 13-2 樣板類別成員 13-3 樣板實戰

3 樣板 樣版 樣版就如同一個模子,從現實的角度來看,我們將石膏與水混合後,在加入模子中,它就能印出特定的形狀出來,而在樣版的觀念裡,石膏與水是資料型態,產生出來的成品則是類別或函數。 石膏 樣版

4 樣版函數 template <class 樣版參數> 回傳資料的型態 函數名稱(參數,…) { . }

5 資料交換樣版 template <class X> void Max_and_Min(X i,X j) {
if (i>j) cout<<"Max is "<<i<<". Min is "<<j<<"\n"; else cout<<"Max is "<<j<<". Min is "<<i<<"\n"; }

6 樣版類別 1 class A 2 { 3 protected: 4 int x; 5 public: 6 A(int y){x=y;}
2            { 3            protected: 4            int x; 5            public: 6            A(int y){x=y;} 7            void show() 8            { 9            cout<<"x: "<<x<<"\n"; 10        } 11        };

7 宣告類別變數 類別名稱<資料型態>物件名稱(參數);

8 1            void main() 2            { 3            int xy = 10; 4            A<int> aa(10); 5            aa.show(); 6            7            char pp = 'a'; 8            A<char> bb(pp); 9            bb.show(); 10        }

9 13-2 樣板類別成員 鏈結串列就是將每一個單位的資料串連起來,而型成一個大型的資料庫,鏈結串列的資料可以從第一個新增刪除、最後一個新增刪除以及從中間新增刪除,非常符合資料處理的原則。

10 鏈結串列 1 1 2 N-1 N ………………………. 指向 指向 指向

11 鏈結串列中間插入一筆資料 P 1 2 N-1 N ………………………. P 1

12 樣版類別示範 1 template <class T> 2 class A 3 { 4 private: 5 T data;
3            { 4            private: 5            T data; 6            static A* a_head; 7            static A* a_now; 8            A* a_next; 9            public: 10        A() {a_head=a_now=this;a_next=NULL;} 11        A(T node_data):data(node_data),a_next(NULL){} 12        void add(T new_data); 13        void show(); 14        };

13 樣版類別成員的定義 template<class 參數型態> class 類別名稱 {…};

14 樣版類別標頭檔(1) 1 #ifndef _A 2 #define _A 3 4 template <class X>
3            4            template <class X> 5            class B; 6            7            template <class X> 8            void show_x(X t); 9            10        template <class X> 11        class A 12        { 13        public: 14        X i; 15        A(){} 16        friend class B<X>; 17        friend void show_x(X t1); 18        }; 19        20        #endif

15 樣版類別標頭檔(2) 1 #ifndef _H 2 #define _H 3 4 template <class X>
3            4            template <class X> 5            class A; 6            7            template <class X> 8            class B 9            { 10        A<X> aa; 11        public: 12        B(X tz){aa.i=tz;} 13        void show_z() 14        { 15        cout<<"B is A's friend. And A's i is "<<aa.i<<"\n"; 16        } 17        }; 18        19        20        template <class X> 21        void show_x(X t1) 22        { 23        A<X> aa; 24        aa.i = t1; 25        cout<<"show_x function is A's friend. And A's i is "<<aa.i<<"\n"; 26        } 27        28        #endif

16 朋友樣版類別示範 1 #include <iostream.h> 2 #include "ch13_7_1.h"
4            5            void main() 6            { 7            B<int> bb(10); 8            bb.show_z(); 9            10        show_x(12.8f); 11        }

17 13-3 樣版實戰 1 template<class T>
2            void A<T>::inadd(int index,T new_data) 3            { 4            int i=0; 5            a_now = a_head->a_next; 6            while (i<index && a_now!=NULL) 7            { 8            a_now = a_now->a_next; 9            i++; 10        } 11        12        if (a_now!=NULL) 13        { 14        A *temp_data = new A(0); 15        temp_data = a_now->a_next; 16        a_now->a_next = new A(new_data); 17        a_now = a_now->a_next; 18        a_now->a_next = temp_data; 19        } 20        }

18 從最前面插入,如下列程式碼所示: 1 template<class T>
2            void A<T>::headadd(T new_data) 3            { 4            A * new_node = new A(new_data); 5            A *temp_data = a_head->a_next; 6            a_head->a_next = new_node; 7            a_head->a_next->a_next = temp_data; 8            }

19 函數成員是用來處理資料可以從鏈結串列中間插入


Download ppt "樣版."

Similar presentations


Ads by Google