1. 程式人生 > >c++基礎:過載,模板

c++基礎:過載,模板

一:過載 1.函式過載: (1)不同引數型別,不同引數個數可以過載 例如下面的不能過載:  void fun(int); 和 void fun(int &) (2)不能用函式返回值過載

2.運算子過載(1)編譯器根據參加運算的運算元的型別來識別不同的運算; (2)過載運算子就是編寫一個運算子函式,該函式原形是:            <返回值的資料型別> operate<要過載的運算子>(<形參表>) (3)可以用普通函式或成員函式的形式過載操作符 (4)當利用非成員函式過載雙目運算子時,第一個形參表示左邊的運算元,第二個形參表示右邊的運算元 (5)當用成員函式過載雙目運算子時,運算子左邊的操作符就是物件本身

,不能在將它作為運算子函式的引數,這時運算子函式只需要一個引數; (6)使用者不能定義新的運算子,只能對現有的運算子過載,過載後保持原來的優先順序和結合性 (7)以下的運算子不能過載:.(成員運算子),::,?:,.*

二:模板(為了避免程式碼重複編寫) 1.函式模板:即將引數和返回值的資料型別引數化 格式例如: template <class T1, class T2, class T3>                           T1 myfun(T2 a, T3 b)                            { ... }

使用方法: 例如 z=myfun(x,y); 注:上面引數的個數及在函式模板中的位置都是任意的;      T1等引數型別可以用來在函式裡面宣告變數;      函式模板只能用於定義非成員函式;    2.類模板:是一種不確定類的某些資料成員或成員函式引數及返回值的類 格式例如: template <class T1, class T2, int i>                              class myclass                                {.....}
在模板類外部定義模板類的成員函式的格式:            template <class T1, class T2, int i>            T1 myclass<T1, T2, int>::myfun(T2 a, int b)            {...} 類模板通過在使用模板類宣告物件時給出的實際型別來確定型別引數的    例如: myclass<float, double, 123> myobj();

注:類模板的型別引數表可以含有確定型別的引數,如上面的最後一個引數,這時宣告時要代入具體值??