17.1【STL之函数对象】
1 #include<iostream> 2 #include<cstdlib> 3 using namespace std; 4 #include<string> 5 6 7 /* 8 4.1 函数对象 9 10 4.1.1 函数对象概念 11 12 概念: 13 重载函数调用操作符的类,其对象常称为函数对象 14 函数对象使用重载的()时,行为类似函数调用,也叫仿函数 15 16 本质: 17 函数对象(仿函数)是一个类,不是一个函数 18 19 4.1.2 函数对象使用 20 21 特点: 22 函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值 23 函数对象超出普通函数的概念,函数对象可以有自己的状态 24 函数对象可以作为参数传递 25 */ 26 27 28 class MyAdd 29 { 30 public: 31 int operator()(int num1, int num2) 32 { 33 return num1 + num2; 34 } 35 }; 36 37 38 void test412() //特点1 39 { 40 MyAdd ma; 41 cout << ma(10, 10) << endl; 42 } 43 44 45 class MyPrint 46 { 47 public: 48 int num; //定义内部状态 49 50 public: 51 MyPrint() 52 { 53 this->num = 0; 54 } 55 56 void operator()(string str) 57 { 58 cout << str << endl; 59 this->num++; 60 } 61 }; 62 63 64 void test412_2() //特点2 65 { 66 MyPrint mp; 67 mp("helloworld"); 68 mp("helloworld"); 69 mp("helloworld"); 70 mp("helloworld"); 71 cout << "mp的调用次数:" << mp.num << endl; 72 } 73 74 75 void do_print(MyPrint & mp, string str) 76 { 77 mp(str); 78 } 79 80 81 void test412_3() //特点3 82 { 83 MyPrint myprint; 84 do_print(myprint, "hello latex"); 85 } 86 87 88 int main() 89 { 90 test412(); 91 test412_2(); 92 test412_3(); 93 94 system("pause"); 95 return 0; 96 }