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;
    }
    
  • 相关阅读:
    get_folder_size.ps1
    python3-database-shelve
    Windows中实现不依赖账户登录的开机启动程序
    SpringBoot+SpringDataJPA如何实现自定义且自由度高的查询[多表,多查询条件,多排序条件,分页,自定义sql封装]
    Windows phone 8.1之数据绑定(Data Binding)
    TextBox使用技巧--转载
    在Eclipse中使用git把项目导入到git中--转载
    运用多种知识点实现一个综合小游戏
    Git帮助之初始化项目设置向导
    如何从Eclipse导入github上的项目源码--转载
  • 原文地址:https://www.cnblogs.com/Sico2Sico/p/5384242.html
Copyright © 2011-2022 走看看