1. 程式人生 > >C++函式名作為引數的技巧

C++函式名作為引數的技巧

c++呼叫函式,一般我們都是直接編寫一個函式然後在主函式懂呼叫,如下:

#include<iostream>
using namespace std;

int add(int a,int b)
{
    return a+b;
}
void main()
{
    printf("%d\n",add(3,7));
}

但是想象我們要編寫一個計算機程式,裡面有很多運算子,每個運算子都需要編寫一個函式,而且需要在主函式都呼叫一遍,顯得有點效率低下,如果我們通過判斷知道操作人員選得是哪個運算子,我們就可以利用回撥函式的方法來簡化操作。

同陣列名一樣,函式名實際上也是一個指標,指向該函式所對應的區域。所以我們可以這樣:

#include<iostream>
using namespace std;

int add(int a,int b)
{
    return a+b;
}

void main()
{
    int (*pfun)(int,int);//宣告一個函式指標
    pfun=add;
    printf("%d\n",pfun(3,7));
}

注意在宣告函式指標時要和呼叫函式型別對應,即返回型別以及引數型別。
這個甚至可以擴充套件到c++裡面的類函式。

#include<iostream>
using namespace std;
class ADD
{
private
: int a; int b; public: ADD(int x,int y):a(x),b(y){}; int add() { return a+b; } }; typedef int (ADD::*pfun)();//定義一個指向ADD::add函式的指標型別 void main() { ADD Try(77,23); pfun temp=&ADD::add; //指標指向ADD::add函式 //上面一句或者為: pfun temp2=&Try.add; printf("%d\n"
,(Try.*temp)()); }

待續……