HM120 好朋友探楼

HM120 好朋友探楼

HM120 好朋友探楼

来源: 第 120 集 类和对象-友元-成员函数做友元

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

友元可以把某个全局函数、某个类、或**某个类的成员函数**指定为另一个类的好朋友,从而允许它访问对方的私有成员。普通成员函数做不到这一点。

请实现建筑物类型 Building 和好朋友类型 GoodGay,并遵守下列约定(对应成员函数友元的完整写法):

  1. 先前置声明 Building,再定义 GoodGay,最后定义 BuildingGoodGay 内部用建筑物指针维护一座楼。
  2. GoodGay 的构造函数必须在堆区 new 出一座 Building,由该指针持有。
  3. Building 有公共成员「客厅」和私有成员「卧室」,构造时分别写入给定的两个名称。
  4. 成员函数一律写成**类内声明、类外实现**(用 类名:: 给出作用域)。
  5. GoodGay::visitBuilding 的友元成员函数:声明必须写成 friend void GoodGay::visit();。只写 friend void visit(); 会被当成全局函数友元,不能代表成员函数。
  6. GoodGay::visit2 不是友元。它可以读客厅(公共),但绝不能读卧室(私有)。若也要让它读卧室,必须再单独做一次友元声明;本题不做。

读入客厅名、卧室名和若干次探访。每次探访调用 visitvisit2,按下面格式输出它实际访问到的房间。

输入格式

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

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

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

  • \(t=1\):调用 visit(友元,访问客厅和卧室)
  • \(t=2\):调用 visit2(非友元,只访问客厅)

输出格式

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

  • \(t=1\) 先输出 visit s,再输出 visit b
  • \(t=2\) 只输出 visit2 s

其中 \(s\)、\(b\) 是输入给出的客厅名和卧室名,中间一个空格。

样例

输入 #1

客厅 卧室
3
1
2
1

输出 #1

visit 客厅
visit 卧室
visit2 客厅
visit 客厅
visit 卧室

输入 #2

Hall Bed
2
2
1

输出 #2

visit2 Hall
visit Hall
visit Bed

说明

  • 客厅是公共成员,visitvisit2 都能访问。
  • 卧室是私有成员,只有被声明为友元的 GoodGay::visit 能访问;visit2 访问卧室无法通过编译。
  • 样例 #1:友元探访客厅和卧室两间,普通成员只探客厅。
  • 必须用成员函数友元访问私有卧室,不能把卧室改成公共,也不能把整座楼的内容提前拷到 GoodGay 里再打印。

信息

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