我想问的是
对于重载的函数(即同名但是参数不同的函数),怎么办呢?
比如: 定义了两个 int max(int a,int b);和float max(float x,float y);
当另一个函数要调用他们是,怎么给函数指针赋值呢?
问的好,我真的还没有考虑过这个问题!
我刚刚做了实验,源代码如下:
#include <iostream.h>
int Func(int a,int b) { return 0; }
int Func(char a,char b) { return 1; }
typedef int (* pFunc)(int a,int b);
int main(int argc, char* argv[]) { pFunc p; p =(pFunc) Func; int a = (*p)(0,0); cout<<a;
return 0; }
结果是0,看样是匹配了int Func(int a,int b)函数,是由于函数的指针也是有类型的,比如我定义的p就是pFunc类型的. 我有必要对typedef int (* pFunc)(int a,int b);进行解释以下:
首先,看到typedef就应该知道这是定义一个类型.接着往下看,int (* pFunc)(int a,int b);形式,多么象一个函数呀!其实,他就是定义一个函数的指针类型.表示该类型定义的变量应该是个函数指针,该函数有两个变量,都是int型的,该函数有个返回值,也是int型的.
现在大家知道,typydef和define是完全不同的了!
回到正题上来,由于函数的指针是有类型的,所以编译程序在赋值的时候,找到匹配的函数!正如,你写
Func(0,0);编译程序也会找到正确的地址一样
问题的关键是:函数的指针也是有类型的!!
关于typedef,请看我刚发的另一个帖子:http://websx.home.zccn.net/bbs/dispbbs.asp?boardID=56&ID=4166&page=1
有助你理解typedef!!