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 @   yub4by  阅读(40)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示