C 中函式呼叫操作符的過載

2022-08-18 10:30:12 字數 2416 閱讀 6356

1,本博文講述函式物件問題;

2,客戶需求:

1,編寫乙個函式:

1,函式可以獲得斐波那契數列每項的值;

2,每呼叫一次返回乙個值;

3,函式可根據需要重複使用;

4,**示例:

1

for(int i=0; i<10; i++)

2

3,第乙個解決方案程式設計實驗:

1,main.cpp 檔案:

1 #include 2 #include 34

using

namespace

std;56

intfib()718

1920

intmain()

2126

27 cout <2829

for(int i=0; i<5; i++)

3033

34return0;

35 }

2,輸出結果:

112

1324

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 34

using

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,輸出結果:

112

1324

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...