zoukankan      html  css  js  c++  java
  • 怎么将一个类的成员函数作为指针传递给另一个类的成员函数 沉沉_

    今天帮同学解决了一个问题,怎么把一个类的成员函数作为指针传递给另一个类的成员函数。

    以前只接触过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 );
    }

    --未完待续
     
  • 相关阅读:
    实验一
    MVVM Light Toolkit 学习
    配置mongodb分片群集(sharding cluster)
    【silverlight】web发布方法
    MongoDb数据库设计
    【解决方案】添加web服务失败:下载“http://localhost:2540/Service.asmx”时出错。无法生成***类型
    Codeforces #380 div2 C(729C) Road to Cinema
    Codeforces #380 div2 B(729B) Spotlights
    数据挖掘项目总结
    南方电网用电时间序列分析
  • 原文地址:https://www.cnblogs.com/chenchenluo/p/2300642.html
Copyright © 2011-2022 走看看