若有以下程序:
#include 〈iostream〉
using namespace std;
class A
private:
int x;
public:
int z;
void setx(int i)
x=i;
int getx ()
return x;
;
class B : public A
private:
int m;
public:
int p;
void setvalue(int a,int b, int C)
setx (
A.;
z=b;
m=c;
void display()
cout〈〈getx()〈〈","〈〈z〈〈","〈〈m〈〈end1;
;
int main ( )
B obj;
obj.setvalue(2,3,4);
obj.display();
return 0;
程序运行以后的输出结果是( )。A) 产生语法错误
B.2,3,4
C.2,2,2
D.4,3,2
参考答案:B
解析: 本题考核公有继承中的类成员访问权限。当类的继承方式为公有继承时,基类的公有成员和保护成员分别作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。其他外部使用者只能通过派生类的对象访问继承来的公有成员。
在本题中,数据成员z和函数setx()都是基类A的公有成员,它们经过公有继承以后,在派生类B中还是公有成员,而派生类B中的函数setValue()和display()都是公有成员,可以通过对象对它们进行访问。所以程序中对各成员的访问是正确的。本程序的功能是输出已设置的各成员的值。