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

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

1、国家二级 C+机试(继承和派生)模拟试卷 8及答案与解析 一、选择题 1 有如下类定义: class AA int a: public: AA(intn=0): a(n) ; class BB: public AA public: BB(int n)_ ; 其中横线处缺失部分是 ( )。 ( A): a(n) ( B): AA(n) ( C) a(n); ( D) a=n; 2 有如下程序 : #inc1ude iostream using namespace std; class Basel public: Basel(int d) cout d; Basel() ; class Base2

2、 public: Base2(int d) cout d; Base2() ; class Derived: public Basel, Base2 public: Derived (int a, int b, int c, int d); Basel(b), Base2(a), bl(d), b2(c) Private: int b1; int b2; ; int main() Derived d(1, 2, 3, 4); retum 0; 运行时的输出结果是 ( )。 ( A) 1234 ( B) 2134 ( C) 12 ( D) 21 3 已知基类 Employee只有一个构造函数,其

3、定义如下: Employee: Employee(int n): id(n) Manager是 Employee的派生类,则下列对 Manager的构造函数的定义中,正确的是 ( )。 ( A) Manager: Manager(intn): id(n) ( B) Manager: Manager(int n) id=n; ( C) Manager: Manager(int n): Employee(n) ( D) Manager: : Manager(int n) Employee(n); 4 有如下程序: #inc1ude iostream using namespace std; cla

4、ss 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; 运行这个程序的输出结果是 ( )。 ( A) GATC ( B) AGTC ( C) GACT ( D) AGCT 5 有如下程序: #inc1ude iostream using namespace std; class Base public: void fun() cout B; ; class Derived: public Base public: void

5、 fun()_cout D; ; int main() Derived d; d fun(); return 0; 若程序的输出结果是 BD,则划线处缺失的部分是 ( )。 ( A) Fun(); ( B) Base fun(); ( C) Base: fun(); ( D) Base一 fun(); 6 下列关于虚基类的描述中,错误的是 ( )。 ( A)使用虚基类可以消除由多继承产 生的二义性 ( B)构造派生类对象时,虚基类的构造函数只被调用一次 ( C)声明 “class B: virtual publicA”说明类 B为虚基类 ( D)建立派生类对象时,首先调用虚基类的构造函数 7

6、有如下程序: #inc1ude iostream using namespace std; class Mountain int height; public: Mountain (int h=0): height(h) virtual char* GetName() constreturn“山 “; int GetHeight() constreturn height; ; class Lushan: public Mountain Public: Lushan(int d): Mountain(d) Char*GetName() constreturn“庐山 “; ; int main()

7、 Mountain *p=new Lushan(1000); cout p一 GetName() “海拔 “ p一 GetHeight() “米 “; return 0; 运行这个程序的输出结果是 ( )。 ( A)庐山海拔 1000米 ( B)庐山海拔 0米 ( C)山海拔 1000米 ( D)山海拔 0米 8 在 C+中,用于实现运行时多态性的是 ( )。 ( A)内联函数 ( B)重载函数 ( C)模板函数 ( D)虚函数 9 下列关于虚函数的说明中,正确的是 ( )。 ( A)从虚基类继承的函数都是虚函数 ( B)虚函数不得是静态成员函数 ( C)只能通过指针或引用调用虚函数 ( D)

8、抽象类中的成员函数都是虚函数 10 有如下程序: #inc1ude iostream using namespace std; class Base public: void funl()cout “Basen“; virtual void fun2()cout “Basen“; ; class Derived: public Base public: void funl()cout “Derivedn“; void fun2()cout “Derivedn“; ; void f(Base&b)b funl(); b fun2(); int main() Derived obj; f(obj)

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

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

11、 endl; ) ; class 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 endl; ) ; int main() Base B1(50, 50), *pb; Derived D1(10, 20, 30, 40); pb=&D1; return 0: return(); 运行时输出的结果是 ( )。 ( A) 10, 20 ( B) 30, 40 ( C) 20, 30 ( D) 50, 50

12、13 虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数。而非虚函数不支持多态调用。有如下程序: #inc1ude iostream using namespace std; class Base public: virtual void f()cout “f0+“; void g()cout “g0+“; ; class Derived: public Base public: void go cout, “g+“; ; int main Derived d; Base *p=&d; return 0; 运行时输出的结

13、果是 ( ) 。 ( A) f+g+ ( B) f0+g+ ( C) f+g0+ ( D) f0+g0+ 14 有如 下程序: #inc1ude iostream using namespace std; class Base public: void output() cout l; virtual void Print() cout B; ; class Derived: public Base public: void output() cout 2; void Print() cout D; ; int main() Base *ptr=new Derived; ptr一 output

14、(); ptr一 Print(); delete ptr; return 0; 程序的输出结果是 ( ) 。 ( A) 1B ( B) 1D ( C) 2B ( D) 2D 15 有如下程序; #inc1ude iostream using namespace std; class B public: virtual void show() cout “B“; ; class D: public B public: void show() cout “D“; void funl(B *ptr) ptr一 show(); void fun2(B &ref) ref show(); void fu

15、n3(B b) b show(); int main() B b, *p=new D; D d; funl(p); fun2(b); fun3(d); return 0; 程序的输出结果是 ( )。 ( A) BBB ( B) BBD ( C) DBB ( D) DBD 16 下列有关抽象类和纯虚函数的叙述中,错误的是 ( )。 ( A)拥有纯虚函数的类是抽象类,不能用来定义对象 ( B)抽象类的派生类若不实现纯虚函数,它也是抽象类 ( C)纯虚 函数的声明以 “=0; ”结束 ( D)纯虚函数都不能有函数体 17 有如下程序: #inc1ude iostream using namespac

16、e std; class GA public; virtual int f() retum l; ; class GB: public GA public; virtual int f() retum 2; ; void show(GA g)cout g f(); void display(GA &g) cout g f(); int main() GA a: show(a); display(a); GB b: show(b); display(b); retum 0; 运行时的输出结果是 ( )。 ( A) 1111 ( B) 1211 ( C) 1112 ( D) 1212 18 下列选

17、项中,与实现运行时多态性无关的是 ( )。 ( A)重载函数 ( B)虚函数 ( C)指针 ( D)引用 19 在一个抽象类中,一定包含有 ( )。 ( A)虚函数 ( B)纯虚函数 ( C)模板函数 ( D)重载函数 20 有如下程序: #inc1ude iostream using namespace std; class A public: virtual void f() cout 1, void g()cout 2; ; class B: public A public: virtual void f()cout 3; void g()cout 4; ; void show(A &a

18、)a f(); a g(); int main() B b; show(b); retum0; 运行时的输出结果是 ( )。 ( A) 12 ( B) 34 ( C) 14 ( D) 32 21 有如下程序: #inc1ude iostream using namespace std; class Publication出版物类 char name30; public: Publication(char *name=“未知名称 ”) strcpy(this一 name, name); const char*getName()const return name, virtual const ch

19、ar*getType()const return“未知类型 “; ; class Book: public Publication 书类 public: Book(char *name): Publication(name) virtual const char*getType()const return“书 “; ; void showPublication( Publication &p) cout p getType() “: “ p getName() endl; int main() Book book(“精彩人生 “); showPublication(book); return

20、0: 运行时的输出结果是 ( )。 ( A)未知类型:未知名称 ( B)未知类型:精彩人生 ( C)书:未知名称 ( D)书:精彩人生 22 下面是类 shape的定义: class Shape public: Virtual void Draw()=0; ; 下列关于 Shape类的描述中,正确的是 ( )。 ( A)类 Shape是虚基类 ( B)类 Shape是抽象类 ( C)类 Shape中的 Draw函数声明有误 ( D)语句 “Shape s; ”能够建立 Shape的一个对象 s 23 有如下程序: #inc1ude iostream using namespace std; c

21、lass B public: B(int xx): x(xx) +count; x+=10; ) virtual void show() const cout count 一 x endl; ) protected: static int count; private: int x: ; class D: public B public: D(int xx, int yy): B(xx), y(yy) +count; y+=100; virtual void show() const cout count 一 y endl; private: int y; ; int B: count =0;

22、 int main() B *ptFnew D(10, 20); ptr一 show(); delete ptr; return 0; ) 运行时的输出结果是 ( )。 ( A) 1_120 ( B) 2_120 ( C) 1_20 ( D) 2_20 24 有如下程序: #inc1ude iOStream uSing namespace std; class Instrument public: virtual void Display()=0; ; class Piano: public Instrument public: void Display() *函数体程序略 * ; int m

23、ain() Instrument S; Instrument *p=0; ; return 0; 下列叙述中正确 的是 ( )。 ( A)语句 “Insturment *p=0; ”编译时出错 ( B)语句 “Instrument s: ”编译时出错 ( C)类 Piano中的 Display函数不是虚函数 ( D)类 Instrument是一个虚基类 25 有如下程序: #inc1ude iostream using namespace std; class Book public: Book(char*t=“) strcpy(title, t); pnvate: char title40;

24、 ; class Novel: public Book public: Novel(char*t=“): Book(t) char*Category() const return“文学 “; ; int main() Book *pb; pb=new Novel(); cout pb一 Category(); return 0; 若程序运行时 输出结果是 “文学 ”,则划线处缺失的语句是 ( )。 ( A) char*Category(); ( B) char*: Category() const; ( C) virtual char* Category() const; ( D) virtu

25、al char* Category() const=0; 26 有如下程序: #inc1ude iostream using namespace std; class Base public: virtual void functionl() cout 0; void function2() cout 1; ; class Derived: public Base public: void functionl() cout 2; void function2()cout 3; ; int main() Base*p= new Derived(); p一 functionl(); p一 func

26、tion2(); return0, ; 运行时的输出结果是 ( )。 ( A) 01 ( B) 21 ( C) 03 ( D) 23 27 有如下程序: #inc1ude iostream using namespace std; class Base public: virtual void Show()cout B; ; class Derived: public Base public: void Show()cout D; ; int main() Base *p1=new Derived; Derived *p2=new Derived; pl一 Show(); p2一 Show()

27、; delete p1; delete p2; return 0; 运行这个程序的输出结果是 ( )。 ( A) BB ( B) BD ( C) DB ( D) DD 28 有如下类 定义 class Animal public: virtual void Name()=0; ; class Koala: public Animal public: void Name() *函数体略 * ; 关于上述类定义,下列描述中错误的是 ( )。 ( A)类 Koala是类 Animal的派生类 ( B)类 Koala中的 Name函数是一个虚函数 ( C)类 Animal中的 Name函数是一个纯虚函

28、数 ( D)语句 “Animal a; ”能够建立类 Animal的一个对象 a 29 有如下程序: #inc1ude iostream using namespace std; class B public: virtual void f()cout “B“; void g() cout “B“; ; class 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(&obj); return 0; 运行这个程序的输出结果是 ( )。

29、 ( A) DD ( B) BB ( C) BD ( D) DB 国家二级 C+机试(继承和派生)模拟试卷 8答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 根据派生类构造函数的一般格式:派生类名(总参数表):基类名 1( 参数表 1), 基类名 n参数表 n),成员对象名 1(参数表 n+1),成员对象名 m(参数表 n+m)派生类构造函数体。在派生类 BB的构造函数总参数表后面应该接上基类名 AA和其参数。 【知识模块】 继承和派生 2 【正确答案】 D 【试题解析】 程序在创建派生类对象 d时,分别调用基类 Basel和 Basel的构造函数。 【知识模块】 继承和派生 3

30、【正确答案】 C 【试题解析】 基类的构造函数是带有参数的,派生类从基类派生,这就需要在派生类的构造函数名后 面显示的调用基类的构造函数。 【知识模块】 继承和派生 4 【正确答案】 B 【试题解析】 派生类 B是由基类 A公开继承而来,所以在创建类 B的 obj对象时,首先执行基类 A的构造函数 A(),输出 A,再执行派生类 B的构造函数 B(),输出 G,当程序结束时,首先执行派生类的析构函数 B(),输出 T,再执行基类A的析构函数 A(),输出 C。 【知识模块】 继承和派生 5 【正确答案】 C 【试题解析】 派生类 Derived的对象 d调用其成员函数 fun0,要输出结果为B

31、D,所以在其成员函数 fun0中要调用基类 Base的成员函数 fun0。 【知识模块】 继承和派生 6 【正确答案】 C 【试题解析】 虚基类是为了消除由多重继承产生的二义性而提出的。虚基类的说明格式是: Class类名: virtual继承方式基类名,其中关键字 virtual与继承方式的位置无关,但必须位于基类名之前,且 virtual只对紧随其后基类名起作用。对于本题来说,声明 “classB: virtual public A”说明类 A为虚基类。 【知识模块】 继承和派生 7 【正确答案】 A 【试题解析】 在基类 Mountain中定义了虚函数 GetName()输出字符串 “山

32、 ”,而在派生类 Lushan中对虚函数 GetName()进行了重新定义,输出字符串 “庐山 ”。在主函数中对派生类中的虚函数 GetName()进行了多态调用,此时调用的是派生类中重新定义的 GetName(),输出字符字符串 “庐山 ”。 【知识模块】 继承和派生 8 【正确答案】 D 【试题解析】 此题考查的是虚函数的概念。 C+语言的多态性有两种:函数重载和虚函数。虚函数只有在运行时才能被确定,称为运行时多态。编译 时的多态是通过函数重载和模板实现的。 【知识模块】 继承和派生 9 【正确答案】 B 【试题解析】 此题考查的是虚函数的概念。在成员函数的声明前面加上 virual关键字

33、,即可把函数声明为虚函数。虚函数可以是另一个函数的友元函数而不能是静态成员函数。 【知识模块】 继承和派生 10 【正确答案】 B 【试题解析】 此题考查的是虚函数的概念。在 C+语言中,一个派生类的对象可以被它的任何一个基类的指针所指向,若基类和派生类中存在一模一样的成员函数。那么通过该基类指针调用这样的成员 函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。本题中,在 f()函数中,形参b是一个基类的引用,它引用的是主函数中定义的派生类对象 obj,所以在调用funl0时,运行的是基类的版本,而 fun2()运行的是派生类的版本。 【知识模块】 继承和派生 1

34、1 【正确答案】 C 【试题解析】 此题考查的是虚函数的概念。此题中, funcl是虚函数, func2是一般成员函数,而且在派生类与基类中都存在两个这样的函数。在主函数中,语句A*p=new B;定义了一个基类的指针 p,并让它指向一个派生类对象。所以通过该指针调用 funcl时,运行的是派生类的版本,而通过该指针调用 func2运行的是基类的版本。所以程序运行的最后输出是: B1A2。 【知识模块】 继承和派生 12 【正确答案】 A 【试题解析】 此题考查的是多态性。在 C+中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那

35、个重定义版本。在实函数的情况下。通过基类指针所调用的只能是基类的那个函数版本,无法调用到派生类中重定义函数。此题中,通过指针 pb所调用的是基类的版本,即输出 a和 b的值 10, 20。 【知识模块】 继承和派生 13 【正确答案】 C 【试题解析】 此题考查的是虚函数和多态性。此题中,因为 f()是虚函数具有多态性,所以通过指针 p调用的 f()是派生类 Derived中定义的 f();而 g()不是虚函数,通过指针 p调用的是 Base中的 g( )。 【知识模块】 继承和派生 14 【正确答案】 B 【试题解析】 此题考查的是虚函数与多态性。在成员函数的声明前面加上 virual关键字

36、,即可把函数声明为虚函数; 在 C+中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。本题中,从基类的定义可以看出: output()函数是普通成员函数,而 Print()函数是虚函数。所以,通过 ptr指针调用的 output()是基类中的 output(),而通过它调用的 Print()则是派生类中的 Print( )。 【知识模块】 继承和派生 15 【正确答案】 C 【试题解析】 此题考查的是虚函数与多态性。在成员函数的声明前面加上 virual关键字,即可把函数声明为虚函数;在 C+中,一个基类指针可以用于

37、指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。此题中, funl()和 fun20的形参分别是基类的指针和引用,给 funl()传入的实参是指向派生类对象的指针 p, funl()将调用 D类中的show0输出字符 D;给 fun2()出入的实参是基类对象, fun2()调用类 B中的 show0输出字符 B; fun3()由于形参是基类对象,调用的始终都是基类的 show0,输出字符 B。故最终输出 结果是 DBB。 【知识模块】 继承和派生 16 【正确答案】 D 【试题解析】 此题考查的是抽象类和纯虚函数的概念。纯虚函数可以有函数

38、体,它的实现由派生类给出。 【知识模块】 继承和派生 17 【正确答案】 C 【试题解析】 此题考查派生类与虚函数的考查。由主函数 mam入手,其中分别定义了类 GA和 GB的对象 a和 b。首先,执行参数 a的 show函数调用,其中的输出语句为调用 GA类中的 f()虚函数,返回 1。同理 display( a)函数输出 1。show( b)函数中调用的为 GA中的 f()函数, display( b)调用 GA中 f()函数,返回 1, display( b)调用 GB中的 f()函数返回 2。所以最后输出为 1112。 【知识模块】 继承和派生 18 【正确答案】 A 【试题解析】 在

39、 C+中,多态性可以分为两类:编译时的多态性和运行时的多态性。编译时的多态性是通过函数重载和模版体现的,运行时的多态性是通过虚函数体现的。 【知识模块】 继承和派生 19 【正确答案】 B 【试题解析】 拥有纯虚函数的类叫做抽象类,所以抽象类中必然包含有虚函数。 【知识模块 】 继承和派生 20 【正确答案】 D 【试题解析】 在派生类 class B中对基类中的虚拟成员函数 virtual void f()和实函数 void g0进行了重新定义,在主函数中通过语句 show( b);调用派生类中的虚函数 virtual void f() cout 3;)输出 3,调用基类的实函数 void

40、g() cout2; 输出 2。所以选项 D为正确答案。 【知识模块】 继承和派生 21 【正确答案】 D 【试题解析】 因为类 Book继承自基类 Publication,所 以在类 Book中的虚常成员函数 *getType()return”书 ”; 就会覆盖基类中的虚常成员函数*getType()const return”未知类型 ”; ,所以在主函数中调用函数showPublication( book)时, getType()函数的输出的结果是 “书 ”, getName0函数的输出结果为 “精彩人生 ”。 【知识模块】 继承和派生 22 【正确答案】 B 【试题解析】 因为类 Sha

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

42、,因而选项 B)为正确选项。 【知识模块】 继承和派生 25 【正确答案】 D 【试题解析】 根据程序运行的结果为:文学,说明程序执行了派生类 Novel中的成员函数 *Category()const return“文学 ”; ,所以在基类 Book中要把函数*Category()const定义为纯虚函数。 【知识模块】 继承和派生 26 【正确答案】 B 【试题解析】 函数 functionl()在基类 Base中定义为虚成员函数,而在派生类Dervied中重新进行了定义,输出字符 2,函数 function2()在基类 Base中定义虚成员函数,在主函数中使用指向基类的指针变量 p访问 f

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

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

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

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