平台:VC6.0

#include <iostream.h>
#include <string.h>

class     student
{
protected:
             int     num;
             char     name[15];
public:
             student(int     no,char     *pname):num(no)
             {
                            strcpy(name,pname);
             }
             void     print()
             {
                            cout <<num << "    " <<name<<endl;
             }
};
void     main()
{
             student     stu(12, "guyanhun ");
             void     (student::*p)();     //外部声明类中函数的函数指针类型,注意这里*号在右边括号
             p=student::print;                 //外部给该函数指针赋值,赋类中的函数地址
             (stu.*p)();                             //外部调用该指针
}


例2
class classTest{
public:
             void( *classTest::pClassFun)();    //类中函数指针,注意这里*号在左边括号
             static void print(){
                            printf("called print");
             };
};
int main(int argc, char* argv[])
{
             printf("Hello World!\n");

             classTest ct;
             ct.pClassFun=&ct.print;                //外部将类中函数指针赋值为类中函数地址    ,注意这里print是static即静态函数,否则不能赋值
             (*ct.pClassFun)();                         //外部调用函数
        
             return 0;
}

例3
class classTest{
public:
             void( *classTest::pClassFun)();    //类中函数指针,注意这里*号在左边括号
        
             static void print(){
                            printf("called print");
             };

         void AssignFuncPointer(){pClassFun=print;};
};

//实际测试时只要void( *pClassFun)(),不然还会报别的错误
int main(int argc, char* argv[])
{
             //printf("Hello World!\n");
        
             classTest ct;
             ct.AssignFuncPointer();             //在类成员函数中给类中的函数指针赋值,注意这里print是static即静态函数,否则不能赋值
             (*ct.pClassFun)();                        //外部调用函数
        
             return 0;
}

//若 print前面不加static
//error C2440: '=' : cannot convert from 'void (__thiscall classTest::*)(void)' to 'void (__cdecl *)(void)'


参看了上面搜到的例子,但还不是自己想要的,于是多次尝试,得到了下面的形式

#include <stdio.h>
class A
{
public:
        A(int i)
        {
                p2 = (i==1)?funa:funb;
        }
        void (A::*p2)(void);
        void funa(void)
        {
                puts("A");
        }
        void funb(void)
        {
                puts("B");
        }
};
int main()
{
        A a(2);
        void (A::*p)(void);
        p = a.p2;
        (a.*p)();
        return 0;
}
虽然main函数中多了定义p的东西