【C++】指向函数的指针,指向重载函数的指针,指向类成员的指针

本文详细探讨了C++中函数指针的概念、类型定义、初始化、调用方式,以及如何处理不同场景下函数指针的应用,包括指向重载函数、类实例成员函数和静态成员函数的指针,提供了丰富的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 指向函数的指针
    函数的类型由它的返回值和参数列表决定, 但函数不能返回一个函数类型。
    int fce( const char*, ... );
    int fc( const char* );
    
    // point to fce
    typedef int (*PFCE)( const char*, ... );
    // point to fc
    typedef int (*PFC)( const char* );
    
    // Initialization
    PFCE pfce = fce;
    PFC pfc = fc;
    
    // Invoke the functions
    pfce();
    pfc();

  2. 指向重载函数的指针
    在两个函数指针类型之间不能进行类型转换, 必须严格匹配才能找到相应的函数。
    void ff( const char* );
    void ff( unsigned int );
    
    // Error: No Match, not available parameter list
    void (*pf)(int) = ff;
    // Error: No Match, not available return type
    double (*pf2)( const char* )) = ff;

  3. 指向类实例成员函数的指针
    指向类实例成员函数的指针必须匹配三个方面:参数类型和个数,返回类型,所属类类型。
    class Screen
    {
    public:
    	int Add(int lhs, int rhs);
    	int Del( int lhs, int rhs );
    	void ShowNumber(int value);
    };
    
    typedef int (Screen::*OPE)( int, int);
    typedef void (Screen::*SHOW)( int);
    
    OPE ope = &Screen::Add;
    SHOW show = &Screen::ShowNumber;
    
    Screen scr;
    	
    // Invoke its own member
    int value = scr.Add(10, 20);
    scr.ShowNumber(value);
    
    // Invoke the function point
    value = (scr.*ope)(10, 20);
    (scr.*show)(value);

  4. 指向类静态成员函数的指针
    指向类静态成员函数的指针属于普通指针。
    class Screen
    {
    public:
    	static int Add(int lhs, int rhs);
    };
    
    typedef int (*OPE)(int, int);
    
    OPE ope = &Screen::Add;
    
    int value = ope(10, 20);

转载于:https://my.oschina.net/freedomart/blog/125788

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值