C++ 特殊類成員 7-- 7函式指標也可以作為函式的引數 8使用typedef簡化函式指標的宣告
阿新 • • 發佈:2019-01-29
#include <iostream> using namespace std; /*--------------------------------- 17-06 7函式指標也可以作為函式的引數 8使用typedef簡化函式指標的宣告 ---------------------------------*/ void aquare(float &x,float &y){x=x*x;y=y*y;} void cube(float &x,float &y){x=x*x*x;y=y*y*y;} typedef void (*p)(float&,float&);//將整個函式指標重新命名為p //void print(void (*p)(float&,float&),float &x,float &y) //函式指標也可以作為函式的第一個引數 void print(p vp,float &x,float &y) { cout<<"執行前,長:"<<x<<"\t寬:"<<y<<endl; vp(x,y); cout<<"執行後,長:"<<x<<"\t寬:"<<y<<endl; } void Swap(float &x,float &y){int z;z=x;x=y;y=z;} int main() { float a=2,b=3; char choice ='0'; int i; void (*p[4])(float &x,float &y); for(i=0;i<4;i++) { cout<<"0)退出 1)正方形 2)立方體 3)交換x和y的值:"; cin>>choice; bool quit =false; switch(choice) { case '0': quit =true; break; case '1': p[i] =aquare; break; case '2': p[i] =cube; break; case '3': p[i] =Swap; break; default: p[i] =NULL; break; } if(quit) break; if(p[i]==NULL) { cout<<"請輸入一個從0到3的數字:\n"; i--; continue; } cout<<"第"<<i+1<<"次執行:"; cout<<"現在呼叫函式指標陣列p["<<i<<"]所指向的函式..."<<endl; print(p[i],a,b); //呼叫示例 cout<<endl; } return 0; } 執行結果: 0)退出 1)正方形 2)立方體 3)交換x和y的值:1 第1次執行:現在呼叫函式指標陣列p[0]所指向的函式... 執行前,長:2 寬:3 執行後,長:4 寬:9 0)退出 1)正方形 2)立方體 3)交換x和y的值:2 第2次執行:現在呼叫函式指標陣列p[1]所指向的函式... 執行前,長:4 寬:9 執行後,長:64 寬:729 0)退出 1)正方形 2)立方體 3)交換x和y的值:3 第3次執行:現在呼叫函式指標陣列p[2]所指向的函式... 執行前,長:64 寬:729 執行後,長:729 寬:64 0)退出 1)正方形 2)立方體 3)交換x和y的值:0 Press any key to continue