InBlock.gif平台:VC6.0
InBlock.gif
#include <iostream.h>
InBlock.gif#include < string.h>
InBlock.gif
InBlock.gif class     student
InBlock.gif{
InBlock.gif protected:
InBlock.gif             int     num;
InBlock.gif             char     name[15];
InBlock.gif public:
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.gif void     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.gif class classTest{
InBlock.gif public:
InBlock.gif             void( *classTest::pClassFun)();     //类中函数指针,注意这里*号在左边括号
InBlock.gif             static void print(){
InBlock.gif                            printf( "called print");
InBlock.gif             };
InBlock.gif};
InBlock.gif int 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.gif class classTest{
InBlock.gif public:
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.gif int 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.gif class A
InBlock.gif{
InBlock.gif public:
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.gif int 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的东西