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

    --未完待续
     
  • 相关阅读:
    改动EditPlus默认模板
    【Unity3D自学记录】利用代码改动图片属性(Inspector)
    OpenCV两张图片的合并
    HDU 1661 Assigments 贪心法题解
    2016第10周四
    CSS预处理器Sass(Scss)、Less、Stylus
    gulp入门
    2016第10周一
    8个方法让你成为更优秀的程序员
    2016第9周六
  • 原文地址:https://www.cnblogs.com/chenchenluo/p/2300642.html
Copyright © 2011-2022 走看看