HM119 整个类都是好朋友
HM119 整个类都是好朋友
来源: 第 119 集 类和对象-友元-友元类
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
友元还可以让**整个类**成为另一个类的好朋友。在 Building 里写 friend class GoodGay; 之后,GoodGay 的所有成员函数都能访问 Building 的私有成员。没写这行时,类外只能看公共客厅,不能看私有卧室。
实现时必须遵守这些写法:
- 先前置声明
class Building;,再写GoodGay,最后写Building。GoodGay里用Building *维护一座楼。 - 构造函数和参观函数都要**类内声明、类外实现**,用
类名::标明作用域。 GoodGay的构造函数必须new Building(...),在堆区创建房屋并由指针持有。Building有公共成员客厅、私有成员卧室,构造时写入给定名称。- 另写一个非友元类
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
- 通过率
- ?
- 上传者