|
@@ -0,0 +1,81 @@
|
|
|
+//4.5.6 函数调用运算符重载
|
|
|
+
|
|
|
+//⚪函数调用运算符 () 也可以重载
|
|
|
+
|
|
|
+//⚪由于重载后使用的方式非常像函数的调用,因此称为仿函数
|
|
|
+
|
|
|
+//⚪仿函数没有固定写法,非常灵活
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#include <iostream>
|
|
|
+
|
|
|
+//打印输出类
|
|
|
+
|
|
|
+class MYPrint
|
|
|
+{
|
|
|
+public:
|
|
|
+ //重载函数调用运算符
|
|
|
+ void operator()(std::string test)
|
|
|
+ {
|
|
|
+ std::cout << test << std::endl;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+void MyPrint02(std::string test)
|
|
|
+{
|
|
|
+ std::cout << test << std::endl;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void test01()
|
|
|
+{
|
|
|
+ MYPrint myPrint;
|
|
|
+
|
|
|
+ myPrint("Hello World"); //由于使用起来非常类似于函数调用,因此成为仿函数。
|
|
|
+
|
|
|
+ MyPrint02("hello world");
|
|
|
+}
|
|
|
+
|
|
|
+//仿函数非常灵活,没有固定的写法
|
|
|
+
|
|
|
+//加法类
|
|
|
+
|
|
|
+class MyAdd
|
|
|
+{
|
|
|
+public:
|
|
|
+
|
|
|
+ int operator()(int num1,int num2)
|
|
|
+ {
|
|
|
+
|
|
|
+ return num1 + num2;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+void test02()
|
|
|
+{
|
|
|
+ MyAdd myadd;
|
|
|
+
|
|
|
+ int ret = myadd(100, 100);
|
|
|
+
|
|
|
+ std::cout << "ret = " << ret << std::endl;
|
|
|
+
|
|
|
+
|
|
|
+ //匿名函数对象
|
|
|
+ std::cout << MyAdd()(100, 100) << std::endl;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+int main()
|
|
|
+{
|
|
|
+
|
|
|
+ //test01();
|
|
|
+ test02();
|
|
|
+
|
|
|
+ system("pause");
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|