单选题
已知3个类R、S和T,类R中定义了一个私有方法F1和一个公有方法F2;类S中定义了一个公有方法F3;类S为类R的派生类,类T为类S的派生类。它们的继承方式如下所示:
class S: public R {…};
class T: private S {…};
在关于类S的描述中正确的是{{U}} (45) {{/U}};在关于类T的描述中正确的是{{U}} (46) {{/U}}。
【正确答案】 B
【答案解析】
【正确答案】 C
【答案解析】
[要点解析] 类R、S和T,类R中定义了一个私有方法F1和一个公有方法F2;类S中定义了一个公有方法F3,类S为类R的派生类;类T为类S的派生类。其中访问控制包括:public (公有派生)、protected(保护派生)和private(私有派生)。
基类中的访问权限在派生类中的继承关系如表4-8所示。

{{B}}表4-8 访问权限的继承表{{/B}}

{{B}}派生性质{{/B}}
{{B}}在基类中的访问权限{{/B}}
{{B}}在派生类中的访问权限{{/B}}

public

(公有派生)

public
public
protected
protected
private
不可访问

protected

(保护派生)

public
protected
protected
protected
private
不可访问

private

(私有派生)

public
private
protected
private
private
不可访问

对于试题中(45)空缺处,①由于类R中定义了一个私有方法F1,类的私有成员只有在本类中才能访问,因此选项中凡出现“可以访问F1”都是错误的,据此排除选项A、C。②S是采用public继承方式从R派生而来,那么类R中的所有公有成员都是S的公有成员,在程序中的任何位置均可被访问,因此选项B是正确答案。
对于(46)空缺处,①通过继承,F1、F2、F3都成为类T的成员。②由(45)空缺处的分析可知, F1不可以被外界访问,因此选项中凡出现“可以访问F1”都是错误的,据此排除选项A。③由于T采用的是private继承方式,S中的成员都成为T的private成员,即F2、F3都是T的private成员。④私有成员只有本类可以访问,所以T的对象不能访问F2和F3,只有T的成员才能访问它们。因此选项C是正确答案。