zoukankan      html  css  js  c++  java
  • stl(15)函数对象(仿函数)

    1.定义一个类(结构体),这个类(结构体)种重载了"()"这个符号,然后用这个类(结构体)创建的对象就叫做函数对象。

    2.函数对象的用法和函数的用法类似,都是使用"()"调用。

    3.函数对象相较于函数可以拥有自己的状态。比如在定义函数对象的类的时候,可以定义一个int类型的属性来记录该函数对象被调用了多少次;

    4.函数对象是为了配合stl种的一些特定算法使用的,比如在为set容器自定义排序方法的时候就需要传入一个函数对象。

    5.函数对象可以作为一个函数的参数传入。

    6.如果一个函数对象有一个参数叫做一元仿函数,如果有两个参数叫做二元仿函数...

    例1:分别用函数和函数对象实现打印输出一个int的功能

    (1)函数实现

    void myPrint(int a){

      std::cout<<a<<std::endl;

    }

    void main(){

      myPrint(5);

    }

    (2)函数对象实现

    class MyPrint{

    public:

      void operator()(int a){

        std::cout<<a<<std::endl;

      }

    };

    void main(){

      MyPrint myPrint;

      myPrint(5);

    }

    例2:定义一个可以记录自己被调用了多少次的函数对象

    class MyPrint{

    public:

      int count = 0;

      void operator()(int a){

        std::cout<<a<<std::endl;

        count++;

      }

    };

    void main(){

      MyPrint myPrint;

      myPrint(5);

      myPrint(5);

      myPrint(5);

      std::cout<<"被调用的次数是:"<<myPrint.count<<std::endl;

    }

    例3:将函数对象作为一个参数传入函数内部

    class MyPrint{

    public:

      void operator()(int a){

        std::cout<<a<<std::endl;

      }

    };

    void doSome(MyPrint myPrint,int a){

      myPrint(a);

    }

    void main(){

      MyPrint myPrint;

        doSome(myPrint,5);

    }

  • 相关阅读:
    harass
    matlab的legend()用法
    migrate
    大千敦煌面壁
    三维插值(MATLAB)——TriScatteredInterp/scatteredInterpolant函数
    有哪些不出名的诗人写的千古名句?
    听吴翰清讲课笔记
    移动着,心就变了
    人活着为了什么?
    人生就是一场修炼
  • 原文地址:https://www.cnblogs.com/maycpou/p/14438109.html
Copyright © 2011-2022 走看看