[计算机类试卷]国家二级C++机试(继承和派生)模拟试卷17及答案与解析.doc

上传人:dealItalian200 文档编号:497751 上传时间:2018-11-30 格式:DOC 页数:25 大小:65.50KB
下载 相关 举报
[计算机类试卷]国家二级C++机试(继承和派生)模拟试卷17及答案与解析.doc_第1页
第1页 / 共25页
[计算机类试卷]国家二级C++机试(继承和派生)模拟试卷17及答案与解析.doc_第2页
第2页 / 共25页
[计算机类试卷]国家二级C++机试(继承和派生)模拟试卷17及答案与解析.doc_第3页
第3页 / 共25页
[计算机类试卷]国家二级C++机试(继承和派生)模拟试卷17及答案与解析.doc_第4页
第4页 / 共25页
[计算机类试卷]国家二级C++机试(继承和派生)模拟试卷17及答案与解析.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、国家二级 C+机试(继承和派生)模拟试卷 17及答案与解析 一、选择题 1 已知基类 Emp1oyee只有一个构造函数,其定义如下: Emp1oyee:Emp1oyee(int n):id(n) Manager是 Emp1oyee的派生类,则下列对 Manager的构造函数的定义中,正确的是 ( )。 ( A) Manager:Manager(int n):id(n) ( B) Manager:Manager(int n)id=n; ( C) Manager:Manager(int n): Emp1oyee(n) ( D) Manager:Manager(int n)Emp1oyee(n);

2、2 有如下程序: #incLude iostream using namespace std; c1ass A public: A()cout “A; A()cout C; ; c1ass B:public A public: BOcout G; BOcouK T; ; int main0 B obj; return 0; 运行这个程序的输出结果是 ( )。 ( A) GATC ( B) AGTC ( C) GACT ( D) AGCT 3 有如下程序: #inc1ude iostream using namespace std; c1ass Base public: void fun0 co

3、ut B; ; c1ass Derived:public Base public: void fun()_cout D; ; int main() Derived d; d f un(); rel:um 0; 若程序的输出结果是 BD,则划线处缺失的部分是 ( )。 ( A) fun(); ( B) Base fun(); ( C) Base:fun(); ( D) Base fun(); 4 下列关于虚基类的描述中,错误的是 ( )。 ( A)使用虚基类可以消除由多继承产生的二义性 ( B)构造派生类对象时,虚基类的构造函数只被调用一次 ( C)声明 “c1ass B: virtual pu

4、blic A”说明类 B为虚基类 ( D)建立派生类对象时,首先调用虚基类的构造函数 5 有如下程序: #inc1ude iostream using namespace std; c1ass Mountain int height; public: Mountain (int h=0):height(h) virtual char* GetName()constretum“山 ; int GetHeight()constreturn height;) ; c1ass Lushan:public Mountain Public: Lushan(int d):Mountain(d) Char*G

5、etName()constreturn“庐山 ; ; int main() Mountain *p=new Lushan(1000); cout p GetName() “海拔 “ p GetHeight() “米 “; return0; 运行这个程序的输出结果是 ( )。 ( A)庐山海拔 1000米 ( B)庐山海拔 0米 ( C)山海拔 1000米 ( D)山海拔 0米 6 在 C+中,用于实现运行时多态性的是 ( )。 ( A)内联函数 ( B)重载函数 ( C)模板函数 ( D)虚函数 7 下列关于虚函数的说明中,正确的是 ( )。 ( A)从虚基类继承的函数都是虚函数 ( B)虚函

6、数不得是静态成员函数 ( C)只能通过指针或引用调用虚函数 ( D)抽象类中的成员函数都是虚函数 8 有如下程序: #inc1ude iostream using namespace std; c1ass Base public: void funl()cout “Basen“; virtual void fun2()cout “Basen“; ; c1ass Derived: public Base public: void fun1()cout “Derivedn“; void fun2()cout “Derivedn“; ; void f(Base b fun2(); int main(

7、) Derived obj; f(obj); return 0; 执行这个程序的输出结果是 ( )。 ( A) Base Base ( B) Base Derived ( C) Derived Base ( D) Derived Derived 9 有如下程序 #inc1ude iostream using namespace std; c1assA public: virtual void func1()cout “A1“; void func2()cout “A2“; ; c1ass B:public A public: void func1() cout “B1“; void func2

8、()cout “B2“; ; int main() A*p=newB; p func1(); p func2(); return 0; 运行此程序,屏幕上将显示输出 ( )。 ( A) B1B2 ( B) A1A2 ( C) B1A2 ( D) A1B2 10 如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问 从基类继承的成员。有如下程序,没有使用多态机制。 #inc1ude iostream using namespace std; c1ass Base int a,b, public: Base (int x,int y)a=x; b=y; void show()

9、cout a , b end1; ; c1ass Derived:public Base int c,d; public: Derived (int x,int y,int z,int m):Base(x,y)c=z; d=m;) void show()cout c , d end1;) ; int main() Base B1(50,50),*pb; Derived D1(10,20,30,40); pb= retum0: retum(); 运行时输出的结果是 ( )。 ( A) 10,20 ( B) 30,40 ( C) 20,30 ( D) 50,50 11 虚函数支持多态调用,一个基类

10、的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数。而非虚函数不支持多态调用。 有如下程序: #inc1ude iostream using namespace std; c1ass Base public: virtual void f()cout “f0+“; void g()cout “g0+“; ; c1ass Derived:public Base public: Void g()cont “f+“; void gocout ,“g+“; ; int main Derived d; Base*p= c1ass Base public: v

11、oid output0 cout 1; virtual void Print0 cout B; ; c1ass Derived:public Base public: void output()cout 2; void Print()cout D; ; int main() Base *ptr=new Derived; ptr output(); ptr Print(); delete ptr; retum 0; 程序的输出结果是 ( )。 ( A) 1B ( B) 1D ( C) 2B ( D) 2D 13 有如下程序; #inc1ude iostream using namespace s

12、td; c1ass B public: virtualvoidshow()cout “B“; ; c1ass D:public B public: void show()count “D“; ; void funl(B *ptr)ptr show();) void fun2(B void fun3(B b)b show(); int main() B b,*p=new D; D d; fun1(p); fun2(b); fun3(d); retum 0; 程序的输出结果是 ( )。 ( A) BBB ( B) BBD ( C) DBB ( D) DBD 14 下列有关抽象类和纯虚函数的叙述中,

13、错误的是 ( )。 ( A)拥有纯虚函数的类是抽象类,不能用来定义对象 ( B)抽象类的派生类若不实现纯虚函数,它也是抽象类 ( C)纯虚函数的声明以 “=0; ”结束 ( D)纯虚函数都不能有函数体 15 有如下程 序: #inc1ude iostream using namespace std; c1ass GA public; virtual int f()retuml; ; c1ass GB: public GA public; virtual int f()return 2; ; void show(GAg)cout g f(); void disp1ay(GA int main()

14、 GA a:show(a); disp1ay(a); GB b:show(b); disp1ay(b); retum 0; 运行时的输出结果是 ( )。 ( A) 1111 ( B) 1211 ( C) 1112 ( D) 1212 16 下列选项中,与实现运行时多态性无关的是 ( )。 ( A)重载函数 ( B)虚函数 ( C)指针 ( D)引用 17 在一个抽象类中,一定包含有 ( )。 ( A)虚函数 ( B) 纯虚函数 ( C)模板函数 ( D)重载函数 18 有如下程序: #inc1ude iostream using namespace std; c1ass A public: v

15、irtual void f()cout 1; void g0cout 2; ; c1ass B: public A public: Virtual void f()cout 3; void g()cout 4; ; void show(A a g(); int main() B b; show(b); return 0; 运行时的输出结果是 ( )。 ( A) 12 ( B) 34 ( C) 14 ( D) 32 19 有如下程序: #inc1ude iostream using namespace std; c1ass Publication 出版物类 char name30; public

16、: Publication(char *name=“未知名称 “) strcpy(this name,name); const char*getName()const return name; virtual const char*getType()const return“未知类型 “; ; c1ass Book: public Publication 书类 public: Book(char *name):Publication(name) virtual const char*getType()const return“书 “; ; void showPublication( Publi

17、cation int main() Book book(“精彩人生 “); showPublication(book); return 0; 运行时的输出结果是 ( )。 ( A)未知类型:未知名称 ( B)未知类型:精彩人生 ( C)书:未知名称 ( D)书:精彩人生 20 下面是类 shape的定义: c1ass Shape public: Virtual void Draw()=0; ; 下列关于 Shape类的描述中,正确的是 ( )。 ( A)类 Shape是虚基类 ( B)类 Shape是抽象类 ( C)类 Shape中的 Draw函数声明有 误 ( D)语句 “Shape s;

18、”能够建立 Shape的一个对象 s 21 有如下程序: #inc1ude iostream using namespace std; c1ass B public: B(int xx):x(xx)+count;x+=10; virtual void show()const cout count _ x end1; protected: static int count; private: intx; ; c1ass D:public B public: D(int xx,int yy):B(xx),y(yy)+count;y+=100; virtual void show()const co

19、ut count y end1;) private: int y; ; int B:count =0; int main() B *ptr=new D(10,20); ptr show0; delete ptr; retum 0; 运行时的输出结果是 ( )。 ( A) 1_120 ( B) 2_120 ( C) 1_20 ( D) 2_20 22 有如下程序: #inc1ude iostream using namespace std; c1ass Instrument public: virtual void Disp1ay()=0; ; c1ass Piano: public Instr

20、ument public: void Disp1ay() *函数体程序略 * ) ; int main() Instrument s; Instrument *p=0; /*; return0; 下列叙述中正确的是 ( )。 ( A)语句 “Insturment *p=0;”编译时出错 ( B)语句 “Instrument s; ”编译时出错 ( C)类 Piano中 的 Disp1ay函数不是虚函数 ( D)类 Instrument是一个虚基类 23 有如下程序: #inc1ude iostream using namespace std; c1ass Book public: Book(c

21、har*t=“) strcpy(title,t); _ private: char title40; ; c1ass Novel: public Book public: Novel(char*t=“):Book(t) char*Category()const refflm“文学 “; ; int main() Book *pb; pb=new Novel(); cout pb Category(); return0; 若程序运行时输出结果是 “文学 ”,则划线处缺失的语句是 ( )。 ( A) char*Category0; ( B) char* Category()const; ( C)

22、virtual char* Category()const; ( D) virtualchar* Category()const(); 24 有如下程序: #inc1ude iostream using namespace std; c1ass Base public: virtual void functionl() cout 0; void function2()cout 1; ; c1ass Derived: public Base public: void functionl()cout 2; void function2() cout 3; ; int main() Base*p=

23、new Derived(); p functionl(); p function2(); return (); ; 运行时的输出结果是 ( )。 ( A) 01 ( B) 21 ( C) 03 ( D) 23 25 有如下程序: #inc1ude iostream using namespace std; c1ass Base public: virtual void Show()cout B; ; c1ass Derived: public Base public: void Show() cout ;D; ; int main() Base *p1=new Derived; Derived

24、 *p2=new Derived; p1 S1:tow(); p2 Show(); delete p1; delete p2; retum0; 运行这个程序的输出结果是 ( )。 ( A) BB ( B) BD ( C) DB ( D) DD 26 有如下类定义 c1ass Animal public: virtual void Name()=0; ; c1ass Koala:public Animal public: void Name()/*函数体略 */ ; 关于上述类定义,下列描述中错误的是 ( )。 ( A)类 Koala是类 Animal的派生类 ( B)类 Koala中的 Nam

25、e函数是一个虚函数 ( C)类 Animal中的 Name函数是一个纯虚函数 ( D)语句 “Animal a; ”能够建立类 Animal的一个对象 a 27 有如下程序: #inc1ude iostream using namespace std; c1ass B public: virtual void f()cout “B“; void g()cout “B“; ; c1ass D:public B public: void f()cout “D“; void g()cout “D“; ; void h(B*p)p f();p g(); int main() D obj; h(调用派生

26、类中的虚函数virtual void f() cout 3;输出 3,调用基类的实函数 void g() cout 2;输出2。所以选项 D为正确答案。 【知识模块】 继承和派生 19 【正确答案】 D 【试题解析】 因为类 Book继承自基类 Publication,所以在类 Book中的虚常成员函数 *getType()retum“书 “; 就会覆盖基类中的虚常成员函数*getType()const return“未知类型 “; ,所以在主函数中调用函数showPublication(book)时, getType()函数的输出的结果是 “书 ”, getName()函数的输出结果为 “精

27、彩人生 ”。 【知识模块】 继承和派生 20 【正确答案】 B 【试题解析】 因为类 Shape中包含纯虚函数 Draw(),所以类 Shape是抽象类。 【知识模块】 继承和派生 21 【正确答案】 B 【试题解析】 在主函数中定义了一个基类 B的指针变量 ptr,并调用类 D的构造函数创建了类 D的实例对象,因为变量 count是全局变量所以在调用基类 B的构造函数给其值加 1,在调用 D的构造函数时给其值加 1,因而输出其值等于 2,在类 D的构造函数中给成员变量 y的值加 100,所以其等于 120并输出。 【知识模块】 继承和派生 22 【正确答案】 B 【试题解析】 由于函数 Di

28、sp1ay()是一个纯虚函数,所以类 Instrument是抽象类,而抽象类是不能定义对象的,因而选项 B)为正确选项。 【知识模块】 继承和派生 23 【正确答案】 D 【试题解析】 根据程序运行的结果为:文学,说明程序执行了派生类 Novel中的成员函数 *Category()Oconst return“文学 “; ,所以在基类 Book中要把函数*Category()const定义为纯虚函数。 【知识模块】 继承和派生 24 【正确答案】 B 【试题解析】 函数 functionl()在基类 Base中定义为虚成员函数,而在派生类Dervied中重新进行了定义,输出字符 2,函数 fun

29、ction2()在基类 Base中定义虚成员函数,在主函数中使用指向基类的指针变量 p访问 function20时,输出 1。 【知识模块】 继承和派生 25 【正确答案】 D 【试题解析】 在基 类 Base中定义了虚函数 Show()输出字符 B,而在派生类Derived中对虚函数 Show()进行了重新定义,输出字符 D。在主函数中对基类和派生类中的虚函数 Show0进行了多态调用,此时调用的是派生类中重新定义的Show(),输出字符 D。 【知识模块】 继承和派生 26 【正确答案】 D 【试题解析】 在类 Animal定义了纯虚函数 Name(),所以类 Animal就是一个抽象类,而抽象类是不能够建立对象的。 【知识模块】 继承和派生 27 【正确答案】 D 【试题 解析】 在基类 B中定义虚函数 f()和成员函数 g(),而在派生类 D中定义了函数 f0和同名函数 g()。而函数 h中的形参为指向基类的指针变量 p,所以在主函数中执行 h(&obj)时,会调用派生类的函数 f(),输出 D,再调用基类的函数 g(),输出 B。 【知识模块】 继承和派生

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1