您的位置:首页 > 编程语言 > C语言/C++

C++ 重载函数调用运算符

2016-03-30 13:51 435 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: