函數指針
在平常的C/C++代碼程式設計中, 我們經常會碰到函數指針(Function Pointer)這個概念,函數指針,顧名思義,指向函數入口的指針。
像我們平常使用的指向數組的指針,我們可以傳遞數組的位址。函數指針也一樣,我們用代碼示範一下具體用法:
#include<iostream>
using namespace std;
typedef void(*func)(int);
void print(int value)
{
printf("%d ", value);
}
void add(int &sum, int index, func pFunc)
{
sum += index;
pFunc(sum);
}
int main(void)
{
int sum = 0;
for (int i = 0; i < 10; i++)
{
add(sum, i, print);
}
system("pause");
return 0;
}
我們可以将一個函數名作為一個參數傳遞。
仿函數
在《C++标準程式庫》一書中對仿函數的解釋是:任何東西,隻要其行為像函數,就可以稱之為仿函數。
那麼仿函數到底是什麼呢?
想一下,我們平常調用函數少不了的是什麼?
函數行為,是指可以使用小括号傳送參數,調用某個東西
是以隻要我們定義的對象可以有這種行為就可以了,是以我們要成為仿函數,就必須要重載()操作符,以讓對象的行為像函數。一個對象,具備像函數一樣的行為, 就稱為函數對象。
#include<iostream>
using namespace std;
class MyPrint
{
public:
void operator()(int value) const
{
printf("%d ", value);
}
};
void add(int &sum, int index, MyPrint &pFunc)
{
sum += index;
pFunc(sum);
}
int main(void)
{
int sum = 0;
MyPrint print;
for (int i = 0; i < 10; i++)
{
add(sum, i, print);
}
system("pause");
return 0;
}