1,本博文講述函式物件問題;
2,客戶需求:
1,編寫乙個函式:
1,函式可以獲得斐波那契數列每項的值;
2,每呼叫一次返回乙個值;
3,函式可根據需要重複使用;
4,**示例:
1for(int i=0; i<10; i++)
2
3,第乙個解決方案程式設計實驗:
1,main.cpp 檔案:
1 #include 2 #include 34using
namespace
std;56
intfib()718
1920
intmain()
2126
27 cout <2829
for(int i=0; i<5; i++)
3033
34return0;
35 }
2,輸出結果:
1121324
3556
78813
9211034
1155
3,帶狀態函式:每次呼叫的返回結果不同的函式,即相同的輸入引數,不同的返回結果;
4,兩種方法實現帶狀態函式:
1,是將函式內部要使用的變數用全域性變數來代替,可以記錄上一次函式呼叫的狀態,但是**中建議不要使用全域性變數;
2,是將函式內部要使用的變數用靜態區域性變數來代替;
4,存在的問題:
1,函式一旦開始呼叫就無法重來:
1,靜態區域性變數處於函式內部,外界無法改變;
2,函式為全域性函式,是唯一的,無法多次獨立使用;
3,無法指定某個具體的數列項作為初始值;
2,當用全域性變數來使用時,可以達到目的,但是要在呼叫函式之前設定全域性變數初始值,這樣和使用者的要求不符合;
5,解決方案:
1,函式物件:
1,使用具體的類物件取代函式;
2,該類的物件具備函式呼叫的行為;
1,很了不起的行為;
3,建構函式指定具體數列項的起始位置;
4,多個物件相互獨立的求解資料項;
6,函式物件:
1,函式呼叫操作符(()):
1,只能通過類的成員函式過載;
2,可以定義不同引數的多個過載函式;
(3),c 和 c++ 中,函式呼叫操作符 「()」 其實是編譯器內建的操作符,它的地位同 「」 一致,可以被過載,過載後乙個類的物件可以當做 函式來使用;
7,最終解決方案程式設計實驗:
1,main.cpp 檔案:
1 #include 2 #include 34using
namespace
std;56
class
fib7
1617
/*這個函式實現的非常經典
*/18 fib(int
n)1930}
3132
intoperator () () //
過載函式呼叫操作符 (),這樣類的物件就可以當做函式來呼叫;
3341
};42
43int
main()
4451
52 cout <5354
for(int i=0; i<5; i++)
5558
59 cout <6061 fib fib2(10); //
第二個物件和第乙個獨立,也就可以從頭開始了;
6263
for(int i=0; i<5; i++)
6467
68return0;
69 }
2,輸出結果:
1121324
3556
78813
9211034
1155
1213514
8151316
2117
34
3,提供函式物件,通過私有成員變數來記錄函式呼叫狀態,意味著繞開了區域性 變數和全域性變數這樣的限制;
4,帶狀態函式實現方法:
1,用全域性變數實現函式內部的使用變數;
2,靜態區域性變數;
3,函式物件中的成員變數;
8,小結:
1,函式呼叫操作符(())是可過載的;
2,函式呼叫操作符只能通過類的成員函式過載;
1,和 「=」 相同;
3,函式呼叫操作符可以定義不同引數的多個過載函式;
4,函式物件用於在工程中取代函式指標;
1,實際的 c++ 工程專案中,我們要盡量少的使用原生的指標;
2,字串可以使用字串類而不用字元陣列,陣列可以使用陣列物件,函式指標可以用函式物件,這些物件都是用於在工程中取代指標;
過載函式呼叫操作符
函式呼叫操作符?函式呼叫操作符是 因此此操作符的函式過載是operator 過載函式呼叫操作符的類物件稱為函式物件或仿函式,因此我們可以像使用函式名一樣使用物件名。先看乙個簡單的例子。過載了函式呼叫操作符的乙個類 class area 上面的類中,操作符函式計算乙個面積,它是兩個整數實參的乘積。為了...
C 函式過載操作符
c 可以對操作符 operator 進行過載,一般定義在類的成員函式中,以下面的 為例.class point 定義乙個類模板 建構函式 point 析構函式 過載算術操作符 類似 point operator const point other 過載關係操作符 類似 bool operator c...
c 中 操作符過載
操作符過載 1.有先後順序,如 t3 t1 t2 則t1 t2等價於t1.operate t2 2.對 操作符進行過載時,如aa是有本質區別的。操作符過載就是用函式的方法對乙個操作符進行重新定義,在該函式中定義了操作符所要完成的功能。其中cout是輸出流ostream中的物件 元素 3.a cout...