若有以下程序: #include <iostream> using namespace std; class A { private: int x; protected: int y; pu

admin2010-03-29  12

问题 若有以下程序:    #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

答案4

解析 本题考核保护继承中对类成员的访问权限。
   ①在保护继承中,基类公有成员和保护成员都以保护成员身份出现在派生类中,而基类私有成员不可访问。
   ②基类的公有成员和保护成员被继承以后作为派生类的保护成员,这样,派生类的其他成员可以直接访问它们。
   ③由保护派.生的类声明的对象,不能访问任何基类的成员。在本题中,基类A中的数据成员y和函数setx,经过保护继承以后,在派生类B中成为保护成员,派生类B的对象不能访问它们。而派生类B中的函数setvalue和 display都是公有成员,可以通过对象对它们进行访问。所以程序中对各成员的访问是正确的。本程序的功能是对类中各数据成员进行赋值,然后查看赋值是否正确。
转载请注明原文地址:https://kaotiyun.com/show/fXjp777K
0

最新回复(0)