【C++】指向函數的指針,指向重載函數的指針,指向類成員的指針

  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);
相關文章
相關標籤/搜索