首页 > 其他 > 详细

stl(15)函数对象(仿函数)

时间:2021-02-23 23:31:13      阅读:19      评论:0      收藏:0      [点我收藏+]

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

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

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

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

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

 

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

}

stl(15)函数对象(仿函数)

原文:https://www.cnblogs.com/maycpou/p/14438109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!