问答题
【说明】
在下面程序横线处填上适当的字句,3个(2)空填的是一样的。使其输出结果为:
x=5
x=6
y=7
x=8
z=9
【程序】
#include<iostream.h>
class X1{
int x;
{{U}} (1) {{/U}};
X1(int xx=0){x=xx;}
{{U}} (2) {{/U}}void Output(){
cout<<"x="<<x<<end;
}
};
{{U}} (3) {{/U}}Y1:public X1{
int y;
public:
Y1(int xx=0,int yy=0);X1(xx){y=yy;}
{{U}} (2) {{/U}}void Output(){
{{U}} (4) {{/U}}Output();
cout<<"y="<<y<<endl;
}
};
class Z1:public X1{
int z:
{{U}} (5) {{/U}};
Z1(int xx=0,int zz=0):X1(xx)(z=zz;}
{{U}} (2) {{/U}}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∷。