HM118 好朋友串门

HM118 好朋友串门

HM118 好朋友串门

来源: 第 118 集 类和对象-友元-全局函数做友元

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

一栋房子里,客厅是公开房间,卧室是私有房间。外人可以直接走进客厅;卧室只有被主人认作“好朋友”的人才能进。

请实现房屋类型 Building

  • 公有成员 sittingRoom:客厅名称。类外的普通函数可以直接读取。
  • 私有成员 bedRoom:卧室名称。类外的普通函数**不能**读取。
  • 构造函数把读入的两个名称分别赋给客厅和卧室。

友元用来把“特殊的全局函数”认作这个类的好朋友,从而允许它访问私有成员。本课只要求**全局函数做友元**(先在类里写 friend 声明,再在类外定义该函数)。声明通常写在类的靠前位置,写在 publicprivate 区都有效,不必再加额外修饰。

请提供两个全局函数:

  1. visitPublic:不是友元。只输出客厅名称;对卧室必须输出 DENIED(表示类外无法访问私有成员),不能去读 bedRoom
  2. visitFriend:是 Building 的友元。同时输出客厅名称和卧室名称。卧室的名称必须来自私有成员,不能在 main 里绕过类直接打印输入。

友元一共有三种常见写法:全局函数做友元、类做友元、成员函数做友元。本题只实现第一种。

输入格式

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

接下来 \(n\) 行,每行两个不含空白的字符串 \(s\)、\(b\)(长度均为 \(1\sim 20\)),表示一栋房子的客厅名和卧室名。

输出格式

对每栋房子输出两行,行末换行:

  • 第一行:PUBLIC、一个空格、客厅名、一个空格、DENIED
  • 第二行:FRIEND、一个空格、客厅名、一个空格、卧室名

样例

输入 #1

2
SittingRoom BedRoom
Keting Woshi

输出 #1

PUBLIC SittingRoom DENIED
FRIEND SittingRoom BedRoom
PUBLIC Keting DENIED
FRIEND Keting Woshi

输入 #2

1
Hall Secret

输出 #2

PUBLIC Hall DENIED
FRIEND Hall Secret

说明

  • 客厅是公有成员,普通全局函数也能读到。
  • 卧室是私有成员,没有 friend 声明时,类外访问会编译失败。
  • 加上 friend void visitFriend(Building *building); 后,该全局函数可以读取卧室。
  • 卧室输出必须来自友元函数对私有成员的访问。

信息

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