问题 单项选择题

若有以下程序: #include <iostream> using namespace std; class Base { private:int x; protected:int y; public:int z;void setx(int i){ x=i;int getx (){ return x;} }; class Inherit : private Base { private:int m; public:int p;void setvalue(int a, int b, intc, int d){ setx (A) ; y=b; z=c; m=d;}void display(){ cout<<getx () <<","<<y<<","<<z<<","<<m<<end1;} }; int main ( ) {Inherit A;A.setvalue(1,2,3,4);A.display ();return 0; }

A.1,2,3,4

B.产生语法错误

C.4,3,2,1

D.2,3,4,5

答案

参考答案:A

解析: 本题考核私有继承中类成员的访问权限。当类的继承方式为私有继承时,基类公有成员和保护成员都以私有成员属性出现在派生类中。私有派生类的成员对其基类成员的访问权和公共派生的方式相同,但是,由私有派生的类声明的对象,不能访问任何基类的成员。 本题中,基类Base中的保护成员y和公有成员setx和getx,经过私有继承以后,称为派生类Inherit的私有成员,所以可以在派生类Inherit的函数成员中对它们进行访问。 类Inherit中的函数成员setvalue和display都是公有成员,所以可以通过Inherit的对象对它们进行访问。 本程序的功能是对类中各数据成员进行赋值,然后查看赋值是否正确。

选择题
单项选择题