怎么将一个类的成员函数作为指针传递给另一个类的成员函数
2011-12-24 20:26
375 查看
今天帮同学解决了一个问题,怎么把一个类的成员函数作为指针传递给另一个类的成员函数。
以前只接触过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 );
}
--未完待续
以前只接触过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 );
}
--未完待续
相关文章推荐
- 类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的
- 成员函数指针作为参数传递给其他函数和普通函数指针的传递
- C函数只能有一个返回值,如果需要返回多个值,怎么办,其实很简单,只要将指针作为函数参数传递就可以了
- 线程的封装技巧:把任意类的成员函数指针作为参数
- 指针类型作为成员函数的参数
- lambda的常见用法:传递一个函数的结果作为另一个函数的参数
- 6-2 程序填空(指针类型作为成员函数的参数)
- C++中的成员函数调用原理及this指针的传递方式
- 实例解析使用指针作为函数参数传递需要注意的问题
- 【转载】C++成员函数指针的应用,可作为回调函数实参
- 类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的
- 6-2-b 指针类型作为成员函数的参数
- 指针和引用作为函数传递参数
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- 指针作为函数参数传递
- 如何将一个函数声明为两个类的友元或将该函数作为一个类的成员,另一个类的友元
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- C语言中,数组名作为参数传递给函数时,退化为指针
- 成员函数指针作为形参调用