HM122 直接输出对象

HM122 直接输出对象

HM122 直接输出对象

来源: 第 122 集 类和对象-C++运算符重载-左移运算符重载

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

左移运算符是两个小于号 <<。内置整数可以直接 cout << x。自定义类型的对象不行:编译器不知道对象里有哪些字段、该怎么打印。

请定义人员类型 Person,每人有两个整数属性。必须按下面规则重载左移运算符,才能「输出对象本身,就把内部属性一并打印」:

  1. 不要用成员函数重载。 成员函数本质是左侧对象去调用,简化后会变成 p << coutcout 跑到右边,不是想要的写法。
  2. 必须用全局函数重载,才能让 cout 在左、对象在右:cout << p
  3. cout 的类型是 ostream(输出流)。全局只能有一份标准输出流对象,参数必须按**引用**传入,不能再造一份。参数名叫 coutout 都可以,引用只是别名,指向同一块内存。
  4. 为了链式输出(cout << p << " " << word),函数必须返回 ostream&,把这同一个输出流再交回去。若返回 void,后面无法继续 <<
  5. 两个属性应设为私有。全局函数要读私有成员,需在类里声明 friend。类外不能直接给私有成员赋值,用构造函数写入初值。

读入若干人员以及要接在对象后面的单词,用 cout << 对象 << " " << 单词 完成一行输出。

输入格式

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

接下来 \(n\) 行,每行两个整数 \(a\)、\(b\) 和一个不含空白的单词 \(w\)(\(-10^9 \le a,b \le 10^9\),\(|w|\le 20\))。

输出格式

对每个人输出一行:

A=a B=b w

即先打印两个属性(A=、值、空格、B=、值),再空格,再打印单词。行末换行。属性必须由重载的 operator<< 写出,单词必须接在同一次链式输出里。

样例

输入 #1

2
10 10 hello
3 4 world

输出 #1

A=10 B=10 hello
A=3 B=4 world

输入 #2

1
0 -1 ok

输出 #2

A=0 B=-1 ok

说明

  • 成员函数重载无法把 cout 放在左侧,因此本题禁止那种写法。
  • 返回 ostream& 才能继续输出单词;只打印属性、另外再 cout 一次单词,不算完成链式要求。
  • 样例 #1:属性为 \(10\) 和 \(10\) 时,链式接上单词 hello

信息

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