曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4127|回复: 0
打印 上一主题 下一主题

获取重载函数的地址

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2011-12-8 10:47:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果希望获得重载函数的地址可以通过声明函数指针的方法来获取。函数指针的声明方法和重载函数的声明类似。如果一个重载函数与函数指针相匹配,那么我们获得函数地址就是这个重载函数的地址。

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

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-21 09:34 , Processed in 0.064369 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表