HM122 直接输出对象
HM122 直接输出对象
来源: 第 122 集 类和对象-C++运算符重载-左移运算符重载
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
左移运算符是两个小于号 <<。内置整数可以直接 cout << x。自定义类型的对象不行:编译器不知道对象里有哪些字段、该怎么打印。
请定义人员类型 Person,每人有两个整数属性。必须按下面规则重载左移运算符,才能「输出对象本身,就把内部属性一并打印」:
- 不要用成员函数重载。 成员函数本质是左侧对象去调用,简化后会变成
p << cout,cout跑到右边,不是想要的写法。 - 必须用全局函数重载,才能让
cout在左、对象在右:cout << p。 cout的类型是ostream(输出流)。全局只能有一份标准输出流对象,参数必须按**引用**传入,不能再造一份。参数名叫cout或out都可以,引用只是别名,指向同一块内存。- 为了链式输出(
cout << p << " " << word),函数必须返回ostream&,把这同一个输出流再交回去。若返回void,后面无法继续<<。 - 两个属性应设为私有。全局函数要读私有成员,需在类里声明
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
- 通过率
- ?
- 上传者