当前位置:编程学习 > 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);
    }
}

 

摘自  劲草...无香
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,