已知3个类O,P和Q,类O中定义了一个私有方法F1和一个公有方法F2,类P中定义了一个公有方法F3,类P为类O的派生类,类Q为类P的派生类,它们的继承方式如下所示: class P: public O{…} class Q: private P

admin2019-03-11  43

问题 已知3个类O,P和Q,类O中定义了一个私有方法F1和一个公有方法F2,类P中定义了一个公有方法F3,类P为类O的派生类,类Q为类P的派生类,它们的继承方式如下所示:
   class P: public O{…}
   class Q: private P{…};
   在关于类P的描述中正确的是(10),在关于类Q的描述中正确的是(11)。

选项 A、类Q的对象可以访问F1,F2和F3
B、类Q的对象可以访问F2和F3,但不能访问F1
C、类Q的成员可以访问F2和F3,但不能访问F1
D、类Q的成员不能访问F1,F2和F3

答案C

解析 继承机制是面向对象技术提供的一种解决软件复用问题的途径,即在定义一个新的类时,先把一个或多个已有类的功能全部包含进来,然后再给出新功能的定义或对已有类的功能重新定义。
   在继承关系中存在两个类,即基类和派生类。继承的方式有public,private和protected 3 种。在不同的继承方式下,派生类对基类成员的访问权限不同,外界对派生类成员的能见度也不同。
   (1)基类中成员在派生类中的访问权限
   public:不改变基类中成员的访问权限:
   private:派生类所继承的基类成员的访问权限都改为private:
   protected:基类中private成员的访问权限不变,其余的都改为protected。
   (2)派生类所继承的基类成员的外部能见度
   基类的private成员只有基类的成员函数可以访问,派生类不能访问。
   通过private方式继承的基类成员只有派生类的成员函数可以访问,外界以及派生类的派生类都不能访问。
   通过protected方式继承的基类成员只有派生类以及该派生类的子类可以访问,外界不能访问。
   本题考查的是外界对派生类中继承的基类成员的访问权限。解答此题的关键在于确定基类中成员在派生类中的访问权限,尤其是类Q,它是经过两次继承得到的,Q的直接基类是P,而P又是由O派生出来的。
   首先应注意到类O中有一个私有方法F1。类的私有成员只有在本类中才能访问,因此凡是出现“可以访问F1”的选项都是错误的,这样对于空(1)而言,选项A,C就可以排除了。其次,P是采用public继承方式从O派生而来的,那么类O中的所有公有成员都是P的公有成员,在程序中的任何地方都可以访问一个类的公有成员,因此只有选项B是正确的。
   通过继承,F1,F2,F3都成为类Q的成员。由上一题的选择可知,F1是不可以被外界访问的,因此凡是出现“可以访问F1”的选项都是错误的,这样A就被排除了。由于Q采用的是private继承方式,P中的成员都成为Q的private成员,即F2,F3都是Q的private成员。私有成员只有本类可以访问,所以Q的对象不能访问F2和F3,只有Q的成员才能访问它们。因此选项C是正确答案。
转载请注明原文地址:https://kaotiyun.com/show/zcRZ777K
0

相关试题推荐
最新回复(0)