曲径通幽论坛

标题: 获取重载函数的地址 [打印本页]

作者: beyes    时间: 2011-12-8 10:47
标题: 获取重载函数的地址
如果希望获得重载函数的地址可以通过声明函数指针的方法来获取。函数指针的声明方法和重载函数的声明类似。如果一个重载函数与函数指针相匹配,那么我们获得函数地址就是这个重载函数的地址。

下面程序中定义了重载函数 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|
有上可以看到:当重载函数的地址被赋给一个函数指针时,指针指向的函数类型决定了哪个重载函数的地址赋值给该指针。而且,在重载函数中必须有且仅有一个函数的类型准确匹配指针的类型,否则将在编译时产生歧义性错误。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2