C++ 特殊类成员 6-- 6函数指针数组

#include <iostream>
using namespace std;
/*---------------------------------
     17-06 6函数指针数组
  1) 不同于函数指针,函数指针只能存放一个函数的地址;而函数指针数组
     可以存放多个函数的地址
---------------------------------*/
void (*p[5])(int&,int&);
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;}
void print(float &x,float &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<<"次执行,初始值:";
print(a,b);
cout<<"现在调用函数指针数组p["<<i<<"]所指向的函数..."<<endl;
p[i](a,b);
cout<<"执行后的值:";
print(a,b);
cout<<endl;
}


return 0;

}

运行结果:

0)退出 1)正方形 2)立方体 3)交换x和y的值:1
第1次执行,初始值:长:2  宽:3
现在调用函数指针数组p[0]所指向的函数...
执行后的值:长:4        宽:9


0)退出 1)正方形 2)立方体 3)交换x和y的值:2
第2次执行,初始值:长:4  宽:9
现在调用函数指针数组p[1]所指向的函数...
执行后的值:长:64       宽:729


0)退出 1)正方形 2)立方体 3)交换x和y的值:3
第3次执行,初始值:长:64 宽:729
现在调用函数指针数组p[2]所指向的函数...
执行后的值:长:729      宽:64


0)退出 1)正方形 2)立方体 3)交换x和y的值:4
请输入一个从0到3的数字:
0)退出 1)正方形 2)立方体 3)交换x和y的值:1
第4次执行,初始值:长:729        宽:64
现在调用函数指针数组p[3]所指向的函数...
执行后的值:长:531441   宽:4096


Press any key to continue

猜你喜欢

转载自blog.csdn.net/Paulliam/article/details/80492895