stl(15)函数对象(仿函数)
作者:互联网
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);
}
标签:15,函数,stl,void,MyPrint,myPrint,int,对象 来源: https://www.cnblogs.com/maycpou/p/14438109.html