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 }

 

posted @ 2021-05-12 19:46  yub4by  阅读(40)  评论(0编辑  收藏  举报