怎么将一个类的成员函数作为指针传递给另一个类的成员函数
今天帮同学解决了一个问题,怎么把一个类的成员函数作为指针传递给另一个类的成员函数。
以前只接触过C语言中的函数指针:
#include <iostream.h>
void add(int a,int b)
{
cout<<"the value of add is "<<a+b<<endl;
}
void mul(int a,int b)
{
cout<<"the value of multiple is "<<a*b<<endl;
}
/*void (*fun)(int,int)是要传入的函数指针的原型声明*/
void get(int a,int b,void (*fun)(int,int))
{
fun(a,b);
(*fun)(a,b);
}
void main()
{
get(10,10,add);
get(10,10,mul);
}
#include <iostream.h>
class A{
public:
void fun1(double a,double b)
{
cout<<a+b<<endl;
}
};
class B{
public:
template <typename T>
/*
void(T::*fun)(double,double):T类的成员函数fun指针函数声明
类的成员函数和普通的全局函数有区别,所以在使用的时候要加以区别
如果是 void(*fun)(double,double):形式则只能传递普通全局函数的指针,而不能传递类成员函数的指针。
传递类的成员函数的指针必须同时传递能够调用该成员函数的对象,因为除了类的静态成员函数,只有类的对象才能调用其成员函数。
*/
void fun2(double a,double b,T a1,void(T::*fun)(double,double))
{
(a1.*fun)(a,b);
}
};
class C{
public:
void fun3(double a,double b)
{
cout<<a*b<<endl;
}
};
void main()
{
A a;
B b;
C c;
/*
&A::fun1传递一个类的成员函数指针的方式。
*/
b.fun2(10,19,a,&A::fun1);
b.fun2(10,19,c,&C::fun3 );
}