问题 问答题

【说明】 在下面程序横线处填上适当的字句,3个(2)空填的是一样的。使其输出结果为: x=5 x=6 y=7 x=8 z=9 【程序】 #include<iostream.h> class X1{ int x; (1) ; X1(int xx=0){x=xx;} (2) void Output(){ cout<<"x="<<x<<end; } }; (3) Y1:public X1{ int y; public: Y1(int xx=0,int yy=0);X1(xx){y=yy;} (2) void Output(){ (4) Output(); cout<<"y="<<y<<endl; } }; class Z1:public X1{ int z: (5) ; Z1(int xx=0,int zz=0):X1(xx)(z=zz;} (2) void Output(){ X1∷Output(); cout<<"z="<<z<<endl; } }; void main() { X1 a(5);Y1 b(6,7);Z1 c(8,9); X1*p[3]={&a,&b,&c); For(int i=0;i<3;i++){ p[i]->Output();cout<<endl; } }

答案

参考答案:

解析:(1)public (2)virtual (3)class (4)X1∷ (5)public

[分析]: 本题考查了C++类的定义、成员变量的声明、类继承以及虚函数的一些基本知识。 我们对比三个类的定义就可以发现,在类x1和z1的定义中缺少类的成员属性声明,而类一般将成员变量声明为公有的、私有的或受保护的三种类型中的一种,在类的定义中,我们一般将类的构造函数放在公有的属性下面,在题目中只能选择公有的属性了,因此,第(1)空和第(5)空中应该填public。 对三个类的定义进行仔细观察后,我们同样可以发现,每个类中都定义了一个同名函数Output(),而且在后两个类的函数体中调用了函数Output(),由此,我们应该想到虚函数。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。因此,第(2)空应该填virtual。 第(3)空就简单了,考查类的定义,应该填类的标识符class。 从程序中我们可以看到,类Y1和Z1都以公有的方式继承类X1。从输出的结果来分析,类Y1和Z1都输出了两个数,但单从类Z1的函数来看,只能输出一个变量的值 Z,因此,可以发现在类Z1中应该和类Y1一样,都调用了类X1的函数Output(),因此,第(4)空的答案为X1∷。

单项选择题 A1/A2型题
单项选择题