单选题 在C++语言中,己知3个类O、P和Q,类O中定义了一个私有方法F1、一个公有方法F2和一个受保护的方法F3:类P和类Q是类O的派生类,其继承方式如下所示:
class P:protected 0…);
class Q:public 0…;
关于方法F1的描述中正确的是 (18) ;关于方法F2韵描述中正确的是 (19) ;关于方法F3的描述中正确的是 (20)

单选题 A.方法F1无法被访问
B.只有在类O内才能访问方法F1
C.只有在类P内才能访问方法F1
D.只有在类Q内才能访问方法F1
【正确答案】 B
【答案解析】
单选题 A.类O、P和Q的对象都可以访问方法F2
B.类P和Q的对象都可以访问方法F2
C.类O和Q的对象都可以访问方法F2
D.只有在类P内才能访问方法F2
【正确答案】 C
【答案解析】
单选题 A.类O、P和Q的对象都可以访问方法F3
B.类O、P和Q的对象都不可以访问方法F3
C.类O和Q的对象都可以访问方法F3
D.类P和Q的对象都可以访问方法F3。
【正确答案】 B
【答案解析】本题考查C++语言中类(Class)的相关概念。
类是为某种类型的对象定义变量和方法的原型,它表示对现实生活中一类具有共同特征事物的抽象,是面向对象编程的基础。
类是对某个对象的定义,包括对象动作的名称、方法、属性和事件。当引用类的代码运行时,类的一个新的实例,即对象在内存中创建。虽然只有一个类,但可通过它在内存中创建多个相同类型的对象。类创建的所有对象都有相同的成员,即属性、方法和事件。但是每个对象都如同一个独立的实体一样动作,一个对象的属性可以设置成与同类型的其他对象不同的值。
类定义的一般形式如下:
class Name {
public:
类的公有接口
private:
私有的成员函数
私有的数据成员定义
};
类的定义由类头和类体两个部分组成,类头由关键字Class开头,然后是类名,其命名规则与一般标识符的命名规则一致;类体包括所有的细节,并放在一对花括号中。类的定义也是一个语句,所以要以分号结尾;否则会产生编译错误。
类体定义类的成员,它支持如下两种类型的成员。
(1) 数据成员:指定该类对象的内部表示。
(2) 成员函数:指定该类的操作。
类成员有如下3种不同的访问权限。
(1) 公有(Public)成员:可以在类外和子类中访问。
(2) 私有(Private)成员:只能被该类的成员函数访问,在子类中和外部不能被访问。
(3) 保护(Protected)成员:只能被该类的成员函数或派生类的成员函数访问,在外部不能被访问。
类成员的访问权限如表6-2所示。

表6-2 类成员的访问权限

成员

类的成员函数(内部)

类的对象(外部)

Public

可以访问

可以访问

Protected

可以访问

不可以访问

Private

可以访问

不可以访问

数据成员通常是私有的;成员函数通常有一部分是公有的,一部分是私有的。公有函数可以在类外被访问,也称为“类的接口”。可以为各个数据成员和成员函数指定合适的访问权限。 派生类有如下3种继承方式,即公有继承(Public)、私有继承(Private)和保护继承(Protected)。 (1) 公有继承 ·基类成员对派生类的可见性:对派生类来说,基类的公有成员和保护成员可见:基类的公有成员和保护成员作为派生类的成员时保持原有的状态:基类的私有成员不可见:基类的私有成员仍然是私有的,派生类不可访问基类中的私有成员。 ·基类成员对派生类对象的可见性:对派生类对象来说,基类的公有成员是可见的,其他成员不可见。 所以在公有继承时,派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访问基类中的公有成员和保护成员。 (2) 私有继承 ·基类成员对派生类的可见性:对派生类来说,基类的公有成员和保护成员可见:基类的公有成员和保护成员均作为派生类的私有成员,并且不能被这个派生类的子类所访问:基类的私有成员不可见,派生类不可访问基类中的私有成员。 ·基类成员对派生类对象的可见性:对派生类对象来说,基类的所有成员均不可见。 所以在私有继承时,基类的成员只能由直接派生类访问,而无法向下继承。 (3) 保护继承 这种继承方式与私有继承方式的情况相同,区别仅在于对派生类的成员而言。 ·基类成员对派生类的可见性:对派生类来说,基类的公有成员和保护成员可见:基类的公有成员和保护成员均作为派生类的保护成员,并且不能被这个派生类的子类所访问;基类的私有成员不可见:派生类不可访问基类中的私有成员。 ·基类成员对派生类对象的可见性:对派生类对象来说,基类的所有成员均不可见。 所以在保护继承时,基类的成员也只能由直接派生类访问,而无法向下继承。 基本成员在派生类的各种继承方式下,基类成员对派生类和派生类对象的可见性关系如表6-3所示。

表6-3 派生类各种继承方式下的可见性关系

基本成员

派生类的继承方式

对派生类

对派生类的对象

Public

可见,相当于Public成员

可见

Public

Protected

可见,相当于Protected成员

不可见

Private

可见,相当于Private成员

不可见

Public

可见,相当于Protected成员

不可见

Protected

Protected

可见,相当于Protected成员

不可见

Private

可见,相当于Private成员

不可见

Public

不可见

不可见

Private

Protected

不可见

不可见

Private

不可见

不可见

由此可见,子类无沦采用何种继承方式都不能访问基类中Private属性的成员。采用Public继承,基类中的Public及Protected属性的成员访问特性在子类中仍然保持一致;采用Protected继承,基类中的Public及Protected属性成员访问特性在子类中变为Protected;采用Private继承,基类中的Public及Protected属性成员访问特性在子类中变为Private.。
本题中F1是私有方法,仅在本类中才可被访问,其他所有类没有权限访问它。
F2是类O的共有方法,所以类O的对象肯定可以访问F2;由于类P采用Protected方式从类O继承,因此F2方法在类P中将变成Protected保护级别,类P的对象无法访问F2;类Q采用Public方式从类O继承,因此F2方法在类Q中仍然保持Public保护级别,类Q的对象可以访问F2方法。
F3是类O的保护方法,所以类O的对象肯定无法访问F3;类P采用Protected方式从类O继承,因此F3方法在类P中仍然是Protected保护级别,类P的对象无法访问F3;类Q采用Public方式从类O继承,因此F3方法在类Q中仍然保持Protected保护级别,类Q的对象也无法访问F3。