已知3个类O、P和Q,类O中定义了一个私有方法F1和一个公有方法F2;类P中定义了一个公有方法F3,类P为类O的派生类;类Q为类P的派生类,它们的继承方式如下所示:class P:public O{…};class Q:private P{…};在关于类P的描述中正确的是(43);在关于类Q的描述中正确的是(44)。A.类P的对象可以访问F1,但不能访问F2B.类P的对象可以访问F2,但不能访问F1C.类P的对象既可以访问F1,也可以访问F2D.类P的对象既不能访问F1,也不能访问F2

题目

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

class P:public O{…};

class Q:private P{…};在关于类P的描述中正确的是(43);在关于类Q的描述中正确的是(44)。

A.类P的对象可以访问F1,但不能访问F2

B.类P的对象可以访问F2,但不能访问F1

C.类P的对象既可以访问F1,也可以访问F2

D.类P的对象既不能访问F1,也不能访问F2


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

    己知3个类O、P和Q,类O中定义了一个私有方法F1、一个公有方法F2和一个受保护的方法F3;类P和类Q是类O的派生类,其继承方式如下所示。

    关于方法F1的描述中正确的是(41);关于方法F2的描述中正确的是(42);关于方法F3的描述中正确的是(43)。

    A.方法F1无法被访问

    B.只有在类O内才能访问方法F1

    C.只有在类P内才能访问方法F1

    D.只有在类Q内才能访问方法F1


    正确答案:B

  • 第2题:

    已知3个类O、P和Q,类O中定义了一个私有方法F1、一个公有方法 F2和一个受保护的方法F3:类P和类Q为类O的派生类,其继承方式如下所不:

    class P:protected O{...}

    class Q;public O{…}

    在关于方法F1的描述中正确的是(54)。在关千方法F2的描述中正确的是(55)。在关于方法F3的描述中正确的是(56)。

    A.方法F1无法被访问

    B.只有在类O内才能访问方法n

    C.只有在类P内才能访问方法F1

    D.只有在类Q内才能访问方法F1


    正确答案:B

  • 第3题:

    类O定义了私有函数F1。P和Q为O的派生类,定义为class P: protected O{…}; class Q: public O{…}。_______可以访问Fl。

    A.O的对象

    B.P类内

    C.O类内

    D.Q类内


    O 类 内

  • 第4题:

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

    class P:pubhc O{…}

    class Q:Pnvate P{…}

    在关于类P的描述中正确的是(42),在关于类Q的描述中正确的是(43)。

    A.类P的对象可以访问F1,但不能访问F2

    B.类P的对象可以访问F2,但不能访问F1

    C.类P的对象既可以访问F1,也可以访问F2

    D.类P的对象既不能访问F1,也不能访问F2


    正确答案:B

  • 第5题:

    已知3个类O、P和Q,类O中定义了一个私有方法F1、一个公有方法F2和一个受保护的方法F3;类P和类Q为类O的派生类,其继承方式如下所示:

    class P:protected O{…};

    class Q:public O{…};

    在关于方法F1的描述中正确的是(1);在关于方法F2的描述中正确的是(2);在关于方法F3的描述中正确的是(3)。

    A.方法F1无法被访问

    B.只有在类O内才能访问方法F1

    C.只有在类P内才能访问方法F1

    D.只有在类Q内才能访问方法F1


    正确答案:B
    解析:本题考查的是面向对象程序设计中的继承机制。
      继承机制是面向对象技术提供的另一种解决软件复用问题的途径。即在定义一个新的类时,先把一个或多个已有类的功能全部包含进来,然后再给出新功能的定义或对已有类的功能重新定义。
      在继承关系中存在两个类:基类和派生类。继承的方式有3种:public、private和 protected。在不同的继承方式下,派生类对基类成员的访问权限不同,外界对派生类成员的能见度也不同。
      ①基类中成员在派生类中的访问权限
      . public:不改变基类中成员的访问权限。
      . private:派生类所继承的基类成员的访问权限都改为private。
      . protected:基类中private成员的访问权限不变,其余的都改为protected。
      ②派生类所继承的基类成员的外部能见度(外界对基类成员的访问权限)
      . 基类的private成员:只有基类的成员函数可以访问,派生类不能访问。
      . 通过private方式继承的基类成员(非private成员):只有派生类的成员函数可以访问,外界以及派生类的派生类都不能访问。
      通过protected方式继承的基类成员(非private成员),只有派生类以及该派生类的子类(非private方式产生的)可以访问,外界不能访问。
      根据上述规则,类P和Q的成员函数及其访问控制如下表所示:
     
      方法F1是基类O的private成员,虽然类P和Q继承了这个方法,但是只有在基类 O的内部才能访问方法F1。因此第(1)空应选择答案B。
      方法F2在类P中的访问控制为protected,因此在类P的内部该方法可以被访问,而类P的对象无法访问该方法;由此就可以判断出选项A和B是错误的。由于方法F2在类O和Q中的访问控制均为public,故类O和Q的对象都可以访问该方法。由此可见选项D所给出的“只有在类P内才能访问方法F2”是不正确。第(2)空的正确答案应该为C。
      方法F3在类O、P、Q中的访问控制均为protected,该方法只有在这3个类的内部才能被访问,故第(3)空的正确答案为B。