并不存在指向对象成员的函数指针。
指向对象成员的指针称为成员指针,和函数指针并不等价,也就是不能当作函数指针使用。
struct A
{
void foo()
{
}
void goo()
{
}
};
void (A::*p)(); // p就是一个A类对象中没有参数返回void的成员函数的成员指针
int main()
{
p = &A::foo; // 然后可以用这种写法对它赋值。
p = &A::goo;
int A::*q; // 数据成员同样可以有成员指针
q = &A::x;
q = &A::y;
A a;
(a.*p)(); // 成员指针的用法,必须和对象配套使用
a.*q = 1;
}
对于必须使用函数指针的情况,可能需要获得静态成员函数的函数指针(静态成员函数是可以正常获得函数指针的)。并在调用时,把对象的地址作为参数传递。
#include"iostream"
using namespace std;
class Test
{
public:
void show(int x)
{
cout<<"test:"<
};
int main()
{
//void (Test::*p)(int x); 哪能这样弄啊
Test test;
//p=test.show; 函数要接受参数啊,没有返回值啊
test.show(9);//这样就输出test:9了
getchar();
return 0;
}
int main()
{ void (Test::*p)(int x);
Test test;
p=&test.show; //必须取地址
(test.*p)(5); // 调用必须关联test
getchar();
return 0;
}