HM119 整个类都是好朋友

HM119 整个类都是好朋友

HM119 整个类都是好朋友

来源: 第 119 集 类和对象-友元-友元类

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

友元还可以让**整个类**成为另一个类的好朋友。在 Building 里写 friend class GoodGay; 之后,GoodGay 的所有成员函数都能访问 Building 的私有成员。没写这行时,类外只能看公共客厅,不能看私有卧室。

实现时必须遵守这些写法:

  1. 先前置声明 class Building;,再写 GoodGay,最后写 BuildingGoodGay 里用 Building * 维护一座楼。
  2. 构造函数和参观函数都要**类内声明、类外实现**,用 类名:: 标明作用域。
  3. GoodGay 的构造函数必须 new Building(...),在堆区创建房屋并由指针持有。
  4. Building 有公共成员客厅、私有成员卧室,构造时写入给定名称。
  5. 另写一个非友元类 Stranger。它可以读客厅,但不能读卧室。

读入客厅名、卧室名和若干次探访。友元类一次访问两间;陌生人只能访问客厅,卧室输出 DENIED

输入格式

第一行两个不含空白的字符串 \(s\)、\(b\),分别是客厅名称和卧室名称(长度 \(1\sim 20\))。

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

接下来 \(q\) 行,每行一个整数 \(t\)(\(t\in\{1,2\}\)):

  • \(t=1\):GoodGay 参观(友元类,访问客厅和卧室)
  • \(t=2\):Stranger 参观(非友元,只访问客厅)

输出格式

对每次探访按访问到的房间输出,行末换行:

  • \(t=1\) 先输出 GoodGay s,再输出 GoodGay b
  • \(t=2\) 先输出 Stranger s,再输出 DENIED

样例

输入 #1

客厅 卧室
3
1
2
1

输出 #1

GoodGay 客厅
GoodGay 卧室
Stranger 客厅
DENIED
GoodGay 客厅
GoodGay 卧室

输入 #2

Hall Bed
2
2
1

输出 #2

Stranger Hall
DENIED
GoodGay Hall
GoodGay Bed

说明

  • friend class GoodGay; 让整个好朋友类都能碰私有成员,不需要再给每个成员函数单独写 friend
  • 卧室必须由友元类从私有成员读出,不能提前拷到 GoodGay 的普通字段里再打印。
  • 前置声明是为了让 GoodGay 里能先写 Building *
  • 程序结束前应 delete 堆上的房屋。

信息

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