函式物件與函式指標

2021-04-24 16:23:19 字數 1856 閱讀 6281

過載了「( )」運算子的自定義型別生成的物件可以像函式名一樣呼叫該類的「( )」運算子函式,所以該物件稱為函式物件。函式物件一般被用於代替函式指標。函式指標作為另外乙個函式的引數,可以使該函式更具通用性,使程式更具可擴充套件性,通過程式1(使用函式指標)和程式2(使用函式物件)的比較,來說明函式物件相對於函式指標的優勢.

1、//使用函式指標的情況:

2  #include

3  using std::cout;

4  using std::endl;

5  6  void print_if(const int * arr,int len,bool (*con)(int))

7  13  bool less_5(int n)

14 

17  bool greater_10(int n)

18 

21  bool not_equal_0(int n)

22 

25  int main()

26  ;

28 

29         print_if(a,10,less_5);

30         print_if(a,10,greater_10);

31         print_if(a,10,not_equal_0);

32 

33         return 0;

34  }

顯式結果:

0 1 2 4 0 0

35 46

1 2 35 46 4 8 6

程式1中的函式print_if使用函式指標作為引數,使其有一定的通用性。但是,這種通用性是有限的,例如,如果想要輸出陣列中小於20、大於30等等滿足其它條件的元素時,程式總要為新的條件新增類似於less_20、greater_30的判定函式。這一缺陷使print_if函式不能使用執行時的判定條件進行陣列元素的輸出(判定函式總是事先寫好)。為了解決這一問題,需要一種執行時把資訊傳遞給判定函式的方法.因此我們可以使用函式物件代替函式指標。函式物件可以向全域性函式一樣執行某種操作,又可以像物件一樣通過成員變數內建一些資訊。

1//使用函式物件的情況

2  #include

3  using std::cout;

4  using std::endl;

5  enum relations ;//定義的有限集合常量,參看下一文"  enum型別的本質".

6  class functionobject

7  13         bool operator()(int n)

14        

25         }

26  };

27  void print_if(const int *arr,int len,functionobject con)

28 

34 

35  int main()

36  ;

38 

39         print_if(a,10,functionobject(5,less));

40         print_if(a,10,functionobject(10,greater));

41         print_if(a,10,functionobject(0,not_equal));

42 

43         return 0;

44  }

顯式結果:

0 1 2 4 0 0

35 46

1 2 35 46 4 8 6

函式print_if的第3個引數是functionobject生成的函式物件,在這3次函式print_if的呼叫中,我們通過傳遞不同的無名函式物件,來輸出滿足不同條件的陣列元素。

函式指標與函式物件

1 概念 函式指標指向某種特定型別,宣告乙個執行函式的指標,只需將指標替換函式名即可 int add int nleft,int nright 普通函式 宣告 int pf int,int 函式指標,pf是指向函式的指標 pf前面有 表示pf是指標,右側是形參列表表示pf指向的是函式,函式返回型別是...

函式指標與指標函式

指標函式 指標函式是指函式的返回值型別是乙個指標型別,即本質是乙個函式。我們知道函式都有返回型別 如果不返回值,則為無值型 只不過指標函式返回型別是某一型別的指標。其定義格式如下所示 返回型別識別符號 返回名稱 形式參數列 返回型別可以是任何基本型別和復合型別。返回指標的函式的用途十分廣泛。事實上,...

函式指標與指標函式

函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...