zoukankan      html  css  js  c++  java
  • C++ 重载函数调用运算符

    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;
    }
    
  • 相关阅读:
    Wedding(2-SAT)
    JSOI2010 满汉全席
    2-SAT问题
    Tarjan求桥
    遥远的国度
    NOIP2014 联合权值
    部落冲突
    仓鼠找sugar
    2018.09.09 DL24 Day2总结
    php一些易犯的错误
  • 原文地址:https://www.cnblogs.com/Sico2Sico/p/5384242.html
Copyright © 2011-2022 走看看