如果希望获得重载函数的地址可以通过声明函数指针的方法来获取。函数指针的声明方法和重载函数的声明类似。如果一个重载函数与函数指针相匹配,那么我们获得函数地址就是这个重载函数的地址。
下面程序中定义了重载函数 space(),第一个 space() 输出 count 个空白字符到屏幕,而第二个 space() 输出 count 个 ch 字符到屏幕。在 main() 中声明两个函数指针,第一个指针指向第一个重载的 space() ,第二个指针指向第2个重载的 space() :
[C++] 纯文本查看 复制代码
#include "stdafx.h"
#include <iostream>
using namespace std;
//输出 count 个空格
void space(int count)
{
for (; count; count--) cout << ' ';
}
//输出 count 个字符 ch
void space(int count, char ch)
{
for (; count; count--) cout << ch;
}
int _tmain(int argc, _TCHAR* argv[])
{
//创建一个指向带有一个整型参数函数的函数指针
void (*fp1)(int);
//创建一个指向带有一个整型参数和一个字符参数的函数的函数指针
void (*fp2)(int, char);
fp1 = space; //获得函数 space(int) 的地址
fp2 = space; //获得函数 space(int, char) 的地址
fp1(22); //输出 22 个空格, 也可以 (*fp1)(22) 这么使用
cout << "|\n";
fp2(30, 'x'); //输出 30 个x, 也可以 (*fp2)(30, 'x') 这么使用
cout << "|\n";
return 0;
}
运行输出: |
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| 有上可以看到:当重载函数的地址被赋给一个函数指针时,指针指向的函数类型决定了哪个重载函数的地址赋值给该指针。而且,在重载函数中必须有且仅有一个函数的类型准确匹配指针的类型,否则将在编译时产生歧义性错误。 |