怎么將一個類的成員函數作為指針傳遞給另一個類的成員函數


今天幫同學解決了一個問題,怎么把一個類的成員函數作為指針傳遞給另一個類的成員函數。

以前只接觸過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 );
}

--未完待續
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM