HM128 三种继承改权限

HM128 三种继承改权限

HM128 三种继承改权限

来源: 第 128 集 类和对象-继承-继承方式

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

继承语法是 class 派生类 : 继承方式 基类。继承方式有三种:public(公共继承)、protected(保护继承)、private(私有继承)。它们会改变基类成员到派生类之后的访问权限。

基类里有三个成员:

  • A:基类中为公共
  • B:基类中为保护
  • C:基类中为私有

权限变化如下:

  1. 基类私有成员无论哪种继承,派生类都访问不到(父亲的隐私,儿子拿不到)。
  2. 公共继承A 到派生类仍是公共,B 仍是保护。
  3. 保护继承AB 到派生类都变成保护。
  4. 私有继承AB 到派生类都变成私有。

访问位置也要分清:

  • In:在派生类自己的成员函数里。公共和保护都能访问,私有不能。
  • Out:在类外通过派生类对象访问。只有派生类里仍是公共的成员才能访问。
  • Grand:再定义一个孙子类,用公共继承去继承这个派生类,并在孙子类的成员函数里访问。孙子把派生类当父亲:派生类里已经变成私有的成员,孙子无论哪种继承都拿不到。

请根据继承方式、访问位置和成员,判断能不能访问。

输入格式

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

接下来 \(q\) 行,每行三个单词:

  • 继承方式:Public / Protected / Private
  • 访问位置:In / Out / Grand
  • 成员:A / B / C

输出格式

对每组询问输出一行 YESNO,行末换行。

样例

输入 #1

8
Public In A
Public In C
Public Out A
Public Out B
Protected Out A
Private In B
Private Grand A
Private In C

输出 #1

YES
NO
YES
NO
NO
YES
NO
NO

输入 #2

3
Protected In A
Protected In B
Protected Grand A

输出 #2

YES
YES
YES

说明

  • 样例 #1:公共继承时,类内能访问 A 不能访问 C;类外只能点到仍是公共的 A,保护成员 B 类外不行。私有继承后 AB 变成儿子自己的私有,儿子类内仍可访问,但类外和孙子都不行。
  • 样例 #2:保护继承后 AB 都是保护,儿子类内可以访问;孙子用公共继承时,保护成员对孙子类内仍可访问。
  • C 在任何继承方式、任何位置都是 NO

信息

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