
平台: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的东西
转载于:https://blog.51cto.com/1501001/555049