国家二级C++机试(继承和派生)模拟试卷20
选择题
1.有如下程序:
#include<iostream>
using namespace sta;
class A{
public:
A(){cout<<’A’;}
~A(){cout<<’C’;}
};
class B:public A{
public:
B(){cout<<’G’;}
~B(){cout<<’T’;}
};
int main(){
B obj;
return 0;
}
运行这个程序的输出结果是( )。(B)
A. GATC
B. AGTC
C. GACT
D. AGCT
解析:派生类B是由基类A公开继承而来,所以在创建类B的obi对象时,首先执行基类A的构造函数A(),输出A,再执行派生类B的构造函数B(),输出G,当程序结束时,首先执行派生类的析构函数~B(),输出T,再执行基类A的析构函数~A(),输出C。
2.有如下程序:
#include<iostream>
using namespace std;
class Base{
public:
void fun0{tout<<’B’;}
};
class Derived:public Base{
public:
void fun(){____cout<<’D’;}
};
int main(){
Derived d;
d.fun();
return 0;
}
若程序的输出结果是BD,则划线处缺失的部分是( )。(C)
A. fun();
B. Base.fun();
C. Base::fun();
D. Base->fun();
解析:派生类Derived的对象d调用其成员函数fun(),要输出结果为BD,所以在其成员函数fun()中要调用基类Base的成员函数fun()。
3.下列关于虚基类的描述中,错误的是( )。(C)
A. 使用虚基类可以消除由多继承产生的二义性
B. 构造派生类对象时,虚基类的构造函数只被调用一次
C. 声明“class B:virtual public A”说明类B为虚基类
D. 建立派生类对象时,首先调用虚基类的构造函数
解析:虚基类是为了消除由多重继承产生的二义性而提出的。虚基类的说明格式是:
Class<类名>:virtual<继承方式><基类名>,其中关键字virtual与继承方式的位置无关,但必须位于基类名之前,且virtual只对紧随其后基类名起作用。对于本题来说,声明“classB:virtual public A”说明类A为虚基类。
4.有如下程序:
#include<iostream>
using namespace std;
class Mountain{
int height;
public:
Mountain(int h=-):height(h){}
virtual ehar*GetName() const{return’’山’’;}
int GetHeight() const{return height;}
};
class Lushan:public Mountain{
Public:
Lushan(int d):Mountain(d){}
Char*GetName() const{return’’庐山’’;}
};
int main(){
Mountain*p=new Lushan(1000);
cout<<p->GetName()<<’海拔’’<<p->GetHeight()<<’’米’’;
return 0;
}
运行这个程序的输出结果是( )。(A)
A. 庐山海拔1000米
B. 庐山海拔0米
C. 山海拔1000米
D. 山海拔0米
解析:在基类Mountain中定义了虚函数GetName()输出字符串“山”,而在派生类Lushan中对虚函数GetName()进行了重新定义,输出字符串“庐山”。在主函数中对派生类中的虚函数GetName()进行了多态调用,此时调用的是派生类中重新定义的GetName(),输出字符字符串“庐山”。
5.在C++中,用于实现运行时多态性的是( )。(D)
A. 内联函数
B. 重载函数
C. 模板函数
D. 虚函数
解析:此题考查的是虚函数的概念。C++语言的多态性有两种:函数重载和虚函数。虚函数只有在运行时才能被确定,称为运行时多态。编译时的多态是通过函数重载和模板实现的。
6.有如下程序:
#include<iostream>
using namespace std;
class Base
{
public:
void fun1(){cout<<’’Base\n’’;}
virtual void fun2(){cout<<’’Base\n’’;}
};
class Derived:public Base
{
public:
void fun1(){cout<<’’Derived\n’’;}
void fun2(){cout<<’’Derived\n’’;}
};
void f(Base&b) { b.fun1();b.fun2();}
int main()
{
Derived obj;
f(obj);
return 0:
}
执行这个程序的输出结果是( )。(B)
A. Base
Base
B. Base
Derived
C. Derived
Base
D. Derived
Derived
解析:此题考查的是虚函数的概念。在C++语言中,一个派生类的对象可以被它的任何一个基类的指针所指向,若基类和派生类中存在一模一样的成员函数。那么通过该基类指针调用这样的成员函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。本题中,在f()函数中,形参b是一个基类的引用,它引用的是主函数中定义的派生
本文档预览:3600字符,共14561字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载