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 }
