HM126 仿函数小括号
HM126 仿函数小括号
来源: 第 126 集 类和对象-C++运算符重载-函数调用运算符重载
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
函数调用运算符就是一对小括号 ()。它可以重载。重载之后,对象可以像函数一样被调用,因此称为**仿函数**。仿函数没有固定写法:参数个数、参数类型、返回值都可以按需求来。
请实现两个类,都重载 operator():
MyPrint:void operator()(const string& text),把传入的字符串原样输出一行。这和普通函数void myPrint02(const string& text)用起来很像,但前者是对象在调用重载后的小括号,后者才是真正的函数调用。MyAdd:int 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\)
输出格式
对每个操作输出一行:
P、F:输出字符串本身A、N:输出一个整数,即两数之和
行末换行。加法必须由 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,返回值可以是void或int。 P与F的可见输出相同,但实现路径不同:一个走对象的operator(),一个走普通函数。A与N的算术结果相同,但N必须用匿名对象,用完即销毁。- 样例 #1:打印
hello与world,以及 \(100+100=200\)。
信息
- ID
- 1125
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者