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






