01_重载函数调用运算符.cpp
#include<iostream>
using namespace std;
class Func_call{
public:
Func_call(){cout<<"Construction"<<endl;}
~Func_call(){cout<<"Destructor"<<endl;}
//重载了函数调用运算符的类,在其调用运算符执行时,可以称作函数对象
bool operator()(int a , int b)
{
cout<<"operator()"<<endl;
return a>b;
}
};
int main()
{
Func_call fc /*()*/;//具名对象
Func_call /**/ ();//匿名对象
fc(10,20);
}
02_函数对象应用场景.cpp
#include<iostream>
#include<algorithm>
using namespace std;
class Func_call{
public:
Func_call(){cout<<"Construction"<<endl;}
~Func_call(){cout<<"Destructor"<<endl;}
//重载了函数调用运算符的类,在其调用运算符执行时,可以称作函数对象
bool operator()(int a , int b)
{
cout<<"operator()"<<endl;
return a<b;
}
};
int main()
{
int m[]={34,45,312,3,21,4,3246};
for(auto k:m)
cout<<k<<" ";
cout<<endl;
sort(m,m+sizeof(m)/sizeof(m[0]),
Func_call()
);
cout<<"sorted:"<<endl;
for(auto k:m)
cout<<k<<" ";
cout<<endl;
}
03_sort的一种内部实现.cpp
#include<iostream>
//#include<algorithm>
using namespace std;
class Func_call{
public:
Func_call(){cout<<"Construction"<<endl;}
~Func_call(){cout<<"Destructor"<<endl;}
//重载了函数调用运算符的类,在其调用运算符执行时,可以称作函数对象
bool operator()(int a , int b)
{
cout<<"operator()"<<endl;
return a<b;
}
};
bool sort(int * start, int *end)
{
int i,j;
for(i=0;i< end- start;i++)
{
for(j=0;j<end-start-i-1;j++)
{
if(start[j]>start[j+1])
{
int t = start[j];
start[j]=start[j+1];
start[j+1] =t;
}
}
}
return true;
}
typedef bool(*COMPARE)(int ,int);
bool sort(int * start, int *end, COMPARE compare)
{
int i,j;
for(i=0;i< end- start;i++)
{
for(j=0;j<end-start-i-1;j++)
{
// if(start[j]>start[j+1])
if(!compare(start[j],start[j+1]))
{
int t = start[j];
start[j]=start[j+1];
start[j+1] =t;
}
}
}
return true;
}
bool comp(int a,int b)
{
// return a>b; //降序
return a<b; //升序
}
int main()
{
int m[]={34,45,312,3,21,4,3246};
for(auto k:m)
cout<<k<<" ";
cout<<endl;
// sort(m,m+sizeof(m)/sizeof(m[0]));
sort(m,m+sizeof(m)/sizeof(m[0]),comp);
cout<<"sorted:"<<endl;
for(auto k:m)
cout<<k<<" ";
cout<<endl;
}