程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 使用類的成員函數指針

使用類的成員函數指針

編輯:C++入門知識

class A;

/******************************************************************************
/* 定義成員函數指針
/******************************************************************************/
/*
*  寫成函數指針typedef void (*fp)(int a, int b);
*  會報錯 error C2440: 'initializing' : cannot convert from '' to 'void (__cdecl *)(int,int)'
*/
typedef void (A::*mfp)(int a, int b);
typedef struct
{
    int sth;
    mfp p;
}T_MAPPING;

/******************************************************************************
/* 類的聲明
/******************************************************************************/
class A
{
public:
    A() {}
    ~A() {}
    void fa(int a, int b);
    void fb(int a, int b);
    void fc(int a, int b);
    void test();
};


#include <stdio.h>
#include "fp.h"

/******************************************************************************
/* 成員函數實現
/******************************************************************************/
void A::fa(int a, int b)
{
    printf("A::fa() a = %d, b = %d\n", a, b);
}

void A::fb(int a, int b)
{
    printf("A::fb() a = %d, b = %d\n", a, b);
}

void A::fc(int a, int b)
{
    printf("A::fc() a = %d, b = %d\n", a, b);
}

/******************************************************************************
/* 成員函數指針的使用
/******************************************************************************/
void A::test()
{
    T_MAPPING a[]=
    {
        {10, &A::fa},
        {20, &A::fb},
        {30, fc},
    };

    for (int idx = 0; idx < sizeof(a)/sizeof(a[0]); idx++)
    {
        /*
        *  函數指針和類成員函數指針的區別是使用類成員函數指針時需要加this指針
        *  調用格式寫成(a[idx].p)(idx, 2 * idx);
        *  則會報錯 er        ror C2064: term does not evaluate to a function
*/
        (this->*a[idx].p)(idx, 2 * idx);
    }
}

 

摘自  勁草...無香
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved