InBlock.gif平台:VC6.0
InBlock.gif
#include <iostream.h>
InBlock.gif#include <string.h>
InBlock.gif
InBlock.gifclass     student
InBlock.gif{
InBlock.gifprotected:
InBlock.gif             int     num;
InBlock.gif             char     name[15];
InBlock.gifpublic:
InBlock.gif             student(int     no,char     *pname):num(no)
InBlock.gif             {
InBlock.gif                            strcpy(name,pname);
InBlock.gif             }
InBlock.gif             void     print()
InBlock.gif             {
InBlock.gif                            cout <<num << "    " <<name<<endl;
InBlock.gif             }
InBlock.gif};
InBlock.gifvoid     main()
InBlock.gif{
InBlock.gif             student     stu(12, "guyanhun ");
InBlock.gif             void     (student::*p)();     //外部声明类中函数的函数指针类型,注意这里*号在右边括号
InBlock.gif             p=student::print;                 //外部给该函数指针赋值,赋类中的函数地址
InBlock.gif             (stu.*p)();                             //外部调用该指针
InBlock.gif}
InBlock.gif

InBlock.gif例2
InBlock.gifclass classTest{
InBlock.gifpublic:
InBlock.gif             void( *classTest::pClassFun)();    //类中函数指针,注意这里*号在左边括号
InBlock.gif             static void print(){
InBlock.gif                            printf("called print");
InBlock.gif             };
InBlock.gif};
InBlock.gifint main(int argc, char* argv[])
InBlock.gif{
InBlock.gif             printf("Hello World!\n");
InBlock.gif
InBlock.gif             classTest ct;
InBlock.gif             ct.pClassFun=&ct.print;                //外部将类中函数指针赋值为类中函数地址    ,注意这里print是static即静态函数,否则不能赋值
InBlock.gif             (*ct.pClassFun)();                         //外部调用函数
InBlock.gif        
InBlock.gif             return 0;
InBlock.gif}
InBlock.gif
例3
InBlock.gifclass classTest{
InBlock.gifpublic:
InBlock.gif             void( *classTest::pClassFun)();    //类中函数指针,注意这里*号在左边括号
InBlock.gif        
InBlock.gif             static void print(){
InBlock.gif                            printf("called print");
InBlock.gif             };
InBlock.gif
InBlock.gif         void AssignFuncPointer(){pClassFun=print;};
InBlock.gif};
InBlock.gif
InBlock.gif//实际测试时只要void( *pClassFun)(),不然还会报别的错误
InBlock.gifint main(int argc, char* argv[])
InBlock.gif{
InBlock.gif             //printf("Hello World!\n");
InBlock.gif        
InBlock.gif             classTest ct;
InBlock.gif             ct.AssignFuncPointer();             //在类成员函数中给类中的函数指针赋值,注意这里print是static即静态函数,否则不能赋值
InBlock.gif             (*ct.pClassFun)();                        //外部调用函数
InBlock.gif        
InBlock.gif             return 0;
InBlock.gif}
InBlock.gif
InBlock.gif//若 print前面不加static
InBlock.gif//error C2440: '=' : cannot convert from 'void (__thiscall classTest::*)(void)' to 'void (__cdecl *)(void)'
InBlock.gif
InBlock.gif
参看了上面搜到的例子,但还不是自己想要的,于是多次尝试,得到了下面的形式
InBlock.gif
#include <stdio.h>
InBlock.gifclass A
InBlock.gif{
InBlock.gifpublic:
InBlock.gif        A(int i)
InBlock.gif        {
InBlock.gif                p2 = (i==1)?funa:funb;
InBlock.gif        }
InBlock.gif        void (A::*p2)(void);
InBlock.gif        void funa(void)
InBlock.gif        {
InBlock.gif                puts("A");
InBlock.gif        }
InBlock.gif        void funb(void)
InBlock.gif        {
InBlock.gif                puts("B");
InBlock.gif        }
InBlock.gif};
InBlock.gifint main()
InBlock.gif{
InBlock.gif        A a(2);
InBlock.gif        void (A::*p)(void);
InBlock.gif        p = a.p2;
InBlock.gif        (a.*p)();
InBlock.gif        return 0;
InBlock.gif}
InBlock.gif虽然main函数中多了定义p的东西