如何在c++中声明指向对象的成员函数的函数指针?

2024-11-28 19:14:39
推荐回答(3个)
回答1:

并不存在指向对象成员的函数指针。


指向对象成员的指针称为成员指针,和函数指针并不等价,也就是不能当作函数指针使用。

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;
}


对于必须使用函数指针的情况,可能需要获得静态成员函数的函数指针(静态成员函数是可以正常获得函数指针的)。并在调用时,把对象的地址作为参数传递。

回答2:

#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;
}

回答3:

int main()
{ void (Test::*p)(int x);
Test test;
p=&test.show; //必须取地址
(test.*p)(5); // 调用必须关联test
getchar();
return 0;
}