类与C中的结构大致相似,其不同之处在于类中规定了哪些成员可以访问,哪些成员不可以访问。这些都通过访问指明赋予以说明。访问指明符有三种,分别是private、protected和public。private成员私有化,除了该类的成员函数以外,谁也不能访问它们。public成员公有化,程序中的所有函数(不管是类内定义的还是类外定义的),都可以访问这些成员。protected成员受限保护,只有该类及该类的子类的成员函数才能够访问。在类的成员定义中,如果没有指明符,则系统默认为private。要注意的是,在C++中,一个类的友元是可以访问该类的所有成员的。
继承的限定也有三种,分别是private(私有继承)、protected(保护继承)和public(公有继承)。
在public继承时,派生类(子类)的public、private、protected型的成员函数可以访问基类中的public成员和protected成员,派生类的对象仅可访问基类中的public成员。
在private继承时,派生类的public、private、protected型的成员函数可以访问基类中的public成员和protected成员,但派生类的对象不可访问基类中的任何成员。
在protected继承时,派生类的public、private、protected型的成员函数可以访问基类中的public成员和protected成员,但派生类的对象不可访问基类中的任何成员。
使用class关键字定义类时,缺省的继承方式是private,也就是说,当继承方式为private继承时,可以省略private。
在本题中,已知3个类O、P和Q,类O中定义了一个私有方法F1、一个公有方法F2和一个受保护的方法F3;类P和类Q为类O的派生类,且P是保护继承方式,Q是公有继承方式。因为F1是类O的私有方法,因此,只有在类O内才能访问方法F1。F2是类O的公有方法,所以类O和Q的对象都可以访问方法F2。F3是类O的受保护的方法,因此,类O、P和Q的对象都不能访问方法F3。
因此,(1)-(3)的正确答案为B、C、B。 |