若有以下程序: #include <iostream> using namespace std; class A { private:int x; protected:int y; public:int z;void setx(int i){ x=i;}int getx (){ return x; }; class B : protected A { public:void setvalue(int a, int b, int c){ setx (a); y=b; z=c;}void display(){ cout<<getx ( ) <<", "<<y<<", "<<z<<", "<<end1;} }; int main () {B obj;obj.setvalue(5, 6, 7);obj.display ( );return 0; } 程序运行后的输出结果是( )。
A.产生语法错误
B.7,6,5
C.5,6,7
D.7,5,6
参考答案:C
解析: 本题考核保护继承中对类成员的访问权限。 ①在保护继承中,基类公有成员和保护成员都以保护成员身份出现在派生类中,而基类私有成员不可访问。 ②基类的公有成员和保护成员被继承以后作为派生类的保护成员,这样,派生类的其他成员可以直接访问它们。 ③由保护派.生的类声明的对象,不能访问任何基类的成员。在本题中,基类A中的数据成员y和函数setx,经过保护继承以后,在派生类B中成为保护成员,派生类B的对象不能访问它们。而派生类B中的函数setvalue和 display都是公有成员,可以通过对象对它们进行访问。所以程序中对各成员的访问是正确的。本程序的功能是对类中各数据成员进行赋值,然后查看赋值是否正确。