c++++ 函數(shù)指針指向函數(shù),允許通過指針調(diào)用函數(shù)。函數(shù)對象是重載了 operator() 操作符的類或結(jié)構(gòu),可像函數(shù)一樣被調(diào)用。它們在使用回調(diào)函數(shù)時(shí)很有用,回調(diào)函數(shù)是傳遞給另一個(gè)函數(shù)作為參數(shù)的函數(shù)。
C++ 函數(shù)指針與函數(shù)對象:解鎖代碼的隱藏潛力
簡介
在 C++ 中,函數(shù)指針和函數(shù)對象是強(qiáng)大的工具,可用于在代碼中表示和操作函數(shù)。理解這些概念至關(guān)重要,因?yàn)樗梢燥@著提高代碼的靈活性和可維護(hù)性。
函數(shù)指針
函數(shù)指針是指向函數(shù)的指針。它存儲函數(shù)的地址,允許您通過指針調(diào)用函數(shù)。語法如下:
return_type (*function_pointer)(parameter1, parameter2, ...);
登錄后復(fù)制
例子:
下面的函數(shù)計(jì)算兩個(gè)數(shù)的和:
int add(int a, int b) { return a + b; }
登錄后復(fù)制
我們可以使用以下函數(shù)指針指向此函數(shù):
int (*add_ptr)(int, int) = add;
登錄后復(fù)制
現(xiàn)在,我們可以通過函數(shù)指針調(diào)用 add
函數(shù):
int result = add_ptr(10, 20); // 等價(jià)于 add(10, 20)
登錄后復(fù)制
函數(shù)對象
函數(shù)對象是一種類或結(jié)構(gòu),重載了 operator()
操作符,使其可以像函數(shù)一樣被調(diào)用。語法如下:
struct FunctionObject { return_type operator()(parameter1, parameter2, ...); };
登錄后復(fù)制
例子:
我們創(chuàng)建一個(gè)函數(shù)對象來計(jì)算兩個(gè)數(shù)的和:
struct AddFunctionObject { int operator()(int a, int b) { return a + b; } };
登錄后復(fù)制
現(xiàn)在,我們可以實(shí)例化此對象并像函數(shù)一樣調(diào)用它:
AddFunctionObject add_object; int result = add_object(10, 20); // 等價(jià)于 add(10, 20)
登錄后復(fù)制
實(shí)戰(zhàn)案例:回調(diào)函數(shù)
函數(shù)指針和函數(shù)對象在使用回調(diào)函數(shù)時(shí)非常有用。回調(diào)函數(shù)是傳遞給另一個(gè)函數(shù)作為參數(shù)的函數(shù)。
例子:
假設(shè)我們有一個(gè)函數(shù),它將一組數(shù)字傳遞給另一個(gè)函數(shù)。后者會(huì)對每個(gè)數(shù)字執(zhí)行操作。我們可以使用函數(shù)指針或函數(shù)對象將第二個(gè)函數(shù)作為回調(diào)函數(shù)傳遞。
使用函數(shù)指針:
void process_numbers(int* numbers, int size, int (*operation)(int)) { for (int i = 0; i < size; i++) { numbers[i] = operation(numbers[i]); } }
登錄后復(fù)制
使用函數(shù)對象:
void process_numbers(int* numbers, int size, FunctionObject& operation) { for (int i = 0; i < size; i++) { numbers[i] = operation(numbers[i]); } }
登錄后復(fù)制