函数对象

来源:互联网 发布:mac 删除键 编辑:程序博客网 时间:2024/05/23 12:44
/* * funcObject.cpp * *  Created on: 2016年8月26日 *      Author: zroad */#include<iostream>#include<string>using namespace std;//一、函数对象的概念//函数对象:即一个重载了括号操作符"()"的对象。当用该对象调用此操作符时,//其表现形式如同普通函数调用一般,因此取名叫函数对象。class FuncObjType{public:    void operator() (){        cout<<"Hello C++!"<<endl;    }};//二、函数对象相对于函数来说的优势://1. 函数对象可以有自己的状态。我们可以在类中定义状态变量,这样一个函数对象在多次的调用中可以共享这个状态。//但是函数调用没这种优势,除非它使用全局变量来保存状态。//2、函数对象有自己特有的类型,而普通函数无类型可言。这种特性对于使用C++标准库来说是至关重要的。这样我们在使用STL中的函数时,//可以传递相应的类型作为参数来实例化相应的模板,从而实现我们自己定义的规则。比如自定义容器的排序规则。class FuncObjType1{public:    FuncObjType1(int i, string s){        cout << "FuncObjType1 is created!" << " " << i << " " << s << endl;    }    int operator() (){ //可以定义返回值,也可以传入参数        cout<<"Hello FuncObjType1!"<<endl;        return 2000;    }};int main() {    FuncObjType fo;  //没有定义构造函数时,直接声明即创建了对象?    fo();  //直接运行重载()的函数    FuncObjType1 fo1(1000, "Hello,world");    int temp = fo1(); //函数对象可以有返回值,可以传入参数    cout << "temp=" << temp << endl;    return 0;}
0 0
原创粉丝点击