HM126 仿函数小括号

HM126 仿函数小括号

HM126 仿函数小括号

来源: 第 126 集 类和对象-C++运算符重载-函数调用运算符重载

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

函数调用运算符就是一对小括号 ()。它可以重载。重载之后,对象可以像函数一样被调用,因此称为**仿函数**。仿函数没有固定写法:参数个数、参数类型、返回值都可以按需求来。

请实现两个类,都重载 operator()

  1. MyPrintvoid operator()(const string& text),把传入的字符串原样输出一行。这和普通函数 void myPrint02(const string& text) 用起来很像,但前者是对象在调用重载后的小括号,后者才是真正的函数调用。
  2. MyAddint operator()(int number1, int number2),返回两数之和。

使用方式也要覆盖两种:

  • 具名对象:先创建对象,再写 对象(参数)
  • 匿名函数对象类型() 会造出一个匿名对象,当前语句结束后立即释放;紧接着再写一对小括号,就是在调用它重载的 operator()。例如 MyAdd()(100, 100) 得到 \(200\)。看到「类型 + 小括号 + 再一对小括号」,前一半是匿名对象,后一半是仿函数调用。

读入若干操作,按要求用仿函数(或对比用的普通打印函数)完成计算 / 输出。

输入格式

第一行一个整数 \(q\)(\(1 \le q \le 1000\))。

接下来 \(q\) 行,每行一种操作:

  • P s:用 MyPrint 的具名对象打印字符串 \(s\)(\(s\) 不含空白,长度 \(1\sim 20\))
  • F s:用普通函数 myPrint02 打印 \(s\)(对比:这不是仿函数)
  • A a b:用 MyAdd 的具名对象计算 \(a+b\)(\(-10^9 \le a,b \le 10^9\))
  • N a b:用匿名函数对象 MyAdd()(a, b) 计算 \(a+b\)

输出格式

对每个操作输出一行:

  • PF:输出字符串本身
  • AN:输出一个整数,即两数之和

行末换行。加法必须由 operator() 算出,不能手写另一套加法公式应付样例。

样例

输入 #1

4
P hello
F world
A 100 100
N 3 4

输出 #1

hello
world
200
7

输入 #2

3
A -5 8
N 0 0
P Hi

输出 #2

3
0
Hi

说明

  • 仿函数只是「类里重载了小括号」,参数可以是一个 string,也可以是两个 int,返回值可以是 voidint
  • PF 的可见输出相同,但实现路径不同:一个走对象的 operator(),一个走普通函数。
  • AN 的算术结果相同,但 N 必须用匿名对象,用完即销毁。
  • 样例 #1:打印 helloworld,以及 \(100+100=200\)。

信息

ID
1125
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者