C++函式名作為引數的技巧
阿新 • • 發佈:2019-02-02
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)());
}
待續……