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

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

1、国家二级 C+机试(继承和派生)模拟试卷 13及答案与解析 一、选择题 1 建立一个有成员对象的派生类对象时,各构造函数体的执行次序为 ( )。 ( A)派生类、成员对象类、基类 ( B)成员对象类、基类、派生类 ( C)基类、成员对象类、派生类 ( D)基类、派生类、成员对象类 2 有如下类定义和变量定义: class Parents public: int publicData; private: int privateData; ; class ChildA: public Parents *类体略 * ; class ChildB: private Parents *类体略 * ; C

2、hildA a; ChildB b; 下列语句中正确的是 ( )。 ( A) cout a publicData endl; ( B) cout a privateData endl; ( C) cout b publicData endl; ( D) cout b privateData endl; 3 通过派生类的对象可直接访问其 ( )。 ( A)公有继承基类的公有成员 ( B)公有继承基类的私有成员 ( C)私有继承基类的公有成员 ( D)私有继承基类的私有成员 4 有如下程序: #include iostream using namespace std; class AA int k

3、 protected: int n; void setK(int k)this- k=k; public: void setN(int n)this- n=n; ; class BB: public AA *类体略 * ; int main() BB x; x n=1; 1 x setN(2); 2 x k=3; 3 x.setK(4); 4 return 0; 在标注号码的四条语句中正确的是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 5 有如下两个类定义 class xx private: double x1; protected: double: x2; publ

4、ic: double x3; ; class YY: protected XX private: double y1; potected: double y2; public: double y3; ; 在类 YY中保护成员变量的个数是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 6 有如下程序: #include iostream using namespace std; class Music public: void setTitle(char*str)strcpy(title, str); protected: char type10; private: char

5、 title20; ; class Jazz: public Music public: void set(char*str) strcpy(type, Jazz); strcpy(title, str); ; 下列叙述中正确的是 ( )。 ( A)程序编译正确 ( B)程序编译时语句 出错 ( C)程序编译时语句 出错 ( D)程序编译时语句 和 都出错 7 当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是 ( )。 ( A)任何 ( B)公有或保护 ( C) 保护或私有 ( D)私有 8 下列关于派生类和基类的描述中,正确的是 ( )。

6、 ( A)派生类成员函数只能访问基类的公有成员 ( B)派生类成员函数只能访问基类的公有和保护成员 ( C)派生类成员函数可以访问基类的所有成员 ( D)派生类对基类的默认继承方式是公有继承 9 有如下类定义: class B public: void fun1() private: void fun2() protected: void fun3() ; class D: public B protected: void fun4() ; 若 obj是类 D的对象,则下列语句中不违反访问控制权限的是 ( )。 ( A) pbj.fun1(); ( B) obj fun2(); ( C) ob

7、j fun3(); ( D) obj fun4(); 10 有如下程序: class Base public: int data; ; class Derivedl: public Base f; ; class Derived2: protected Base; int main() Derivedl d1; Derived2 d2; d1 data=0; d2 data=0; return 0; 下列关于程序编译结果的描述中,正确的是 ( )。 ( A) 皆无编译错误 ( B) 有编泽错误, 无编译错误 ( C) 无编译错误, 有编译错误 ( D) 皆有编译错误 11 有如下程序: #in

8、clude iostream using namespace std; class xx int x; public: XX(int xx=0): x(xx) int getX()return x; ; class YY: public xx int y; public: YY(int xx, int yy): XX(xx), y(yy) int getV()return getX()+y; ; int main() YY c(3, 4); cout c getV()+c getX() endl; return 0; 运行这个程序的输出结果是 ( )。 ( A) 3 ( B) 4 ( C) 7

9、 ( D) 10 12 有如下程序: #include iostream using namespace std; class Media public: void Name(); void Show(); protected: int page; ; class Book: private Media public: void Print() cout page endl; void Show()Media: Show(); ; int main() Book Bible; Bible Name(); Bible.Print(); Bible: Show(); return 0; 编译时有错

10、误的是 ( )。 ( A)语句 ( B)语句 ( C)语句 ( D)语句 13 有如下程序: #include iostream using namespace std; class A public: A()cout A; ; classBpublic: B()cout B; classC: public A B b; public: C()cout C; ; int main()C obj; return 0; 执行后的输出结果是 ( )。 ( A) CBA ( B) BAC ( C) ACB ( D) ABC 14 有如下程序: #include iostream using names

11、pace std; class A public: A()cout A; A()cout A; ; class B: public A A*p; public: B()cout B; p=new A(); B()cout Bt; delete p; ; int main() B obj; return 0; 执行这个程序的输出结果是 ( )。 ( A) BAA A B A ( B) ABA B A A ( C) BAA B A A ( D) ABA A B A 15 有如下程序 #include iostream using namespace std; class Base protecte

12、d: Base()cout A; Base(char c)cout c; ; class Derived: public Base public: Derived(char c)cout c; ; int main() Derived dl(B); return 0; 执行这个程序屏幕上将显示输出 ( )。 ( A) B ( B) BA ( C) AB ( D) BB 16 在一个派生类对象结束其生命周期时 ( )。 ( A)先调用派生类的析构函数后调用基类的析构函数 ( B)先调用基类的析构函数后调用派生类的析构函数 ( C)如果基类没有定义析构函数,则只调用派生类的析构函数 ( D)如果派

13、生类没有定义析构函数,则只调用基类的析构函数 17 下列关于派生类构造函数和析构函数的说法 中,错误的是 ( )。 ( A)派生类的构造函数会隐含调用基类的构造函数 ( B)如果基类中没有缺省构造函数,那么派生类必须定义构造函数 ( C)在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数 ( D)在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 18 下列有关继承和派生的叙述中,正确的是 ( )。 ( A)派生类不能访问基类的保护成员 ( B)作为虚基类的类不能被实例化 ( C)派生类应当向基类的构造函数传递参数 ( D)虚函数必须在派生类中重新实现 19 有如下

14、程序: #include iostream using namespace std; class A public: A(int i)x=i; void dispa, ()cout x , ; private: int x; ; class B: public A public: B(int i): A(i+10)x=i; void dispb()dispa(); cout x endl; private int x: ; int main() B b(2); b dispb(); return 0; 运行时输出的结果是 ( )。 ( A) 10, 2 ( B) 12, 10 ( C) 12,

15、 2 ( D) 2, 2 20 有如下程序: #include iostream using namespace std; class Base int x; public; Baseint n=0; x(n)cout n; Int getX()constreturn x; ; class Derived public Base int y; public; Derived(int m, int n): y(rn), Base(n)cout m; Derived(int m): y(m)cout m; ; int main() Derived dl(3), d2(5, 7); return 0

16、 运行时的输出结果是 ( )。 ( A) 375 ( B) 357 ( C) 0375 ( D) 0357 21 有如下程序: #include iostream using namespace std; class AA public: AA()cout 1; ; class BB: public AA int k: public: BB(): k(0)cout 2; BB(int n): k(n)cout 3; ; int main() BB b(4), c; return 0; 运行时的输出结果是 ( )。 ( A) 1312 ( B) 132 ( C) 32 ( D) 1412 22

17、 有如下程序: #include iostream using namespace std; class C1 public: C1()cout 1; ; class C2: public C1 public: C2()cout 2; ; int main() C2 cb2; C1*cb1; return 0; 运行时的输出结果是 ( )。 ( A) 121 ( B) 21 ( C) 211 ( D) 12 23 有如下程序: #include iostream using namespace std; class Base public: Base(int x=0): valB(x)cout

18、 valB; Base()cout valB; private: int valB; ; class Derived: public Base public: Derived(int x=0, int y=0): Base(x), valD(y)cout valD; Derived()cout valD; private: int valD; ; in t main() Derived obj 12(2, 3); return 0; 运行时的输出结果是 ( )。 ( A) 2332 ( B) 2323 ( C) 3232 ( D) 3223 24 生成派生类对象时,派生类构造函数调用基类构造函

19、数的条件是 ( )。 ( A)无需任何条件 ( B)基类中显示定义了构造函数 ( C)派生类中显式定义了构造函数 ( D)派生类构造函数明确调 用了基类构造函数 25 有如下类定义: class AA int a; Publie: AA(int n=0): a(n) ; class BB: public AA public: BB(int n)_ ; 其中横线处缺失部分是 ( )。 ( A): a(n) ( B): AA(n) ( C) a(n); ( D) a=n; 26 有如下程序: #include iostream using namespace std; class Basel pu

20、blic: Basel(int d) cout d; Base1() ; class Base2 public: Base2(int d) cout d; Base2() ; class Derived: public Base1, Base2 public: Derived(int a, int b, int c, int d); Base1(b), Base2(a), b1(d), b2(c) Private: int b1; int b2; ; int main() Derived d(1, 2, 3, 4); return 0: 运行时的输出结果是 ( )。 ( A) 1234 ( B

21、 2134 ( C) 12 ( D) 21 国家二级 C+机试(继承和派生)模拟试卷 13答案与解析 一、选择题 1 【正确答案】 C 【 试题解析】 建立派生类对象的时候,构造函数的执行顺序如下:执行基类的构造函数,调用的顺序按照基类被继承时候的顺序 (自左向右 )。然后是执行成员对象的构造函数,调用顺序按照各个成员对象在类中的声明顺序 (自上而下 ),最后是执行派生类的构造函数。 【知识模块】 继承和派生 2 【正确答案】 A 【试题解析】 基类 Parents的私有成员 privateData在派生类 ChildA和 ChildB中是不可以访问,所以选项 B、 D是错误,而派生类 Ch

22、ildB私有继承基类Parents,所以基类: Parents的公有成员 publicData在派生类 ChildB中变为私有成员,只能在派生类 ChildB内部访问,因而选项 c是错误的。派生类 ChildA公有继承基类 Parents,所以基类 Parents的公有成员 publicData在派生类 ChildA中可以访问。 【知识模块】 继承和派生 3 【正确答案】 A 【试题解析】 基类的私有成员在派生类中都是不能访问的,所以选项 B、 D是错误的,基类的公有成员通过私有继承后,在派生类中变为了私有成员,只能在派生类中进行访问,而通过派生类的对象不能访问,所以选项 C也是错误的。基类的

23、公有成员通过公有继承后,在派生类中是公有成员,所以可以通过派生对象来访问。 【知识模块】 继承和派生 4 【正确答案】 B 【试题解析】 因为类 BB公有继承自类 AA,所以 AA中的保护成员和公有成员在类 BB中仍是保护成员和公有成员。在选项 B中调用了公有成员函数 setN(int n) this- n=n; ,对保护成员 n进行赋值操作。 【知识模块】 继承和派生 5 【正确答案】 C 【试题解析】 在 C+中派生类从基类保护继承时,基类的公有成员在派生类中改变为保 护成员,基类的保护成员在派生类中仍为保护成员。所以对于本题来说,YY类保护继承自类 XX,那么类 XX中的公有成员 x3和

24、保护成员 x2在派生类中都成为保护成员,再加上类 YY中的保护成员 y2,因此在派生类 YY中保护成员的个数为 3。 【知识模块】 继承和派生 6 【正确答案】 C 【试题解析】 派生类 Jazz不能访问基类 Music中的私有成员 title。 【知识模块】 继承和派生 7 【正确答案】 B 【试题解析】 基类的公有成员和保护成员只有在以保护继承方式继承时,其在继承类中是保护 成员。 【知识模块】 继承和派生 8 【正确答案】 B 【试题解析】 派生类不论是采用那种继承方式继承基类,它的成员函数只能访问基类的公有成员和保护成员。 【知识模块】 继承和派生 9 【正确答案】 A 【试题解析】

25、派生类 D公有继承父类 B,所以 obj可以访问基类 B的公有,不能访问其它成员。 【知识模块】 继承和派生 10 【正确答案】 C 【试题解析】 保护继承的类 Dervied2不能访问基类 Base中的公共数据成员data。 【知识模块】 继承和派生 11 【正确答案】 D 【试题解析】 由于类 YY公开继承自类 XX,所以执行表达式c getV()+c getX()的值等于 3+3+4=10。 【知识模块】 继承和派生 12 【正确答案】 B 【试题解析】 类 Book私有继承自类 Media,所以类 Media中的公有成员函数Name()在继承类 Book中变成了私有成员函数,因而类 B

26、ook的对象 Bible不能访问私有成员函数 Name()。 【知识模块】 继承和派生 13 【正确答案】 D 【试题解析】 此题考查的是类的 继承和派生。系统首先要通过派生类的构造函数调用基类的构造函数,对基类成员初始化;然后对派生类中的新增成员初始化。 【知识模块】 继承和派生 14 【正确答案】 B 【试题解析】 此题考查的是派生类对象的构造与析构。建立派生类对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被定义时声明的顺序 (自左向右 )-执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序 -执行派生类的构造函数。所以本题在建立派生类 B的对象 o

27、bj是会先调用基类 A的构造函数,然后调用自身的 构造函数。注意: B类中定义的成员 p是 A类的指针而不是一个对象,故在调用自身构造函数前不需要构造。而在 B类构造函数中使用 new操作符动态地构造了一个 A类的对象,所以整个构造结果是输出: ABA。 派生类对象的析构与构造严格相反,即先析构自身,然后析构自身所包含的成员对象,最后调用基类的析构函数。故本题中当 main()函数返回时,析构 B类的对象 obj:首先调用 B(),接着再调用 A()因为在 B()函数中释放了动态创建的A类对象,故整个析构所输出的结果是 B A A。所以这个程序输出结果为ABA B A。 【知识模块】 继承和派

28、生 15 【正确答案】 C 【试题解析】 此题考查的是派生类对象的构造。建立派生类对象时,构造函数的执行顺序是:执行基类的构造函数,调用顺序按照各个基类被被继承时声明的顺序:执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序;执行派生类的构造函数。此题中,在建立派生类 Derived的对象 dl时会先调用基类 Base的构造,调用的是默认构造函数,输出字符 A;然后调用自身的构造函数,输出 B;故程序的输出结果是: AB。 【知识模块】 继承和派生 16 【正确答案】 A 【试题解析】 此题考查的是派生类对象的析构。释放派生类对象时,析构函数的执行顺序是:首先调用派生类自身的析构

29、函数;然后调用类成员对象的析构函数;最后调用基类的析构函数。所以四个选项中只有选项 A正确。 【知识模块】 继承和派生 17 【正确答案】 D 【试题解析】 此题考查的是派生类的构造函数和析构函数。在撤销派生类对象时,析构函数的执行过程和构造函数严格相反,即:对派生类新增普通成员进行清理;调用成员对象析构函数,调用基类析构函数对基类进行清理。 【知 识模块】 继承和派生 18 【正确答案】 C 【试题解析】 此题考查的是继承和派生。无论使用哪种继承方式,派生类中的成员都不能访问基类中的私有成员,而可以访问基类中的公有成员和保护成员,所以选项 A错误; C+中只有抽象类不能被实例化,而虚基类不一

30、定非得是抽象类。所以选项 B错误;在派生类中可以重新定义从基类继承下来的虚函数,也可以不重新定义,故选项 D错误。 【知识模块】 继承和派生 19 【正确答案】 C 【试题解析】 此题考查的是派生类的构造。主函数中,首先声明 B类的对象 b,执行进 入 B的构造函数 B(int i)再接着执行 A的构造函数 A(int i),形参 i为 12, x被赋值 12;通过对象 b调用其成员函数 dispb(),输出结果 12:接着执行函数dispb()的第 2条语句输出 2,然后主函数结束。 【知识模块】 继承和派生 20 【正确答案】 C 【试题解析】 此题考查的是派生类的构造与析构。建立派生类的

31、对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序 (自左向右 )-执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序 -执行自身的构造函数。此题中,执行语句 Derived d1(3)首先调用基类的构造函数,输出 0;接着调用自身的构造函数输出 3。执行语句 Derived d2(5, 7)时,会调用基类的 Base(n)函数输出 7;然后执行继承类中的 Derived(int m, int n)的 y(m)输出 5。 【知识模块】 继承和派生 21 【正确答案】 A 【试题解析】 在基类 AA的默认构造函数中,输出字符 1,在继承类 B

32、B的默认构造函数中,输出字符 2,在带有参数 n的构造函数中,输出字符 3。在主函数中,在创 建 BB的对象 b(4)时,会首先调用基类 AA的构造函数输出字符 1,再调用类 BB带参数的构造函数输出字符 3。在创建 BB的对象 c时,会首先调用基类AA的构造函数输出字符 1,再调用类 BB默认的构造函数输出字符 2。所以程序输出的结果为 1312。 【知识模块】 继承和派生 22 【正确答案】 B 【试题解析】 在主函数中定义 C2类的对象,当程序结束时,首先调用 C2类的析构函数 C2,输出 2,再调用 Cl类的析构函数 C1,输出 1。所以程序运行的结果就是 21。 【知识模块】 继承和

33、派生 23 【正确答案】 A 【试题解析】 在主函数中创建类 Derived对象 obj12(2,3)时,因为类 Derived是从基类 Base派生而来,所以首先调用基类的构造函数;输出 2,再调用派生类构造函数,输出 3。当主函数运算结果时,首先调用派生类的析构函数,输出 3,再调用基类的析构函数输出 2。所以输出结果为 2332。 【知识模块】 继承和派生 24 【正确答案】 A 【试题解析】 因为派生类从基类中继承,它含有基类中的数据成员和函数成员,所以当生成派生类对象时,能无条件的调用基类的构 造函数。 【知识模块】 继承和派生 25 【正确答案】 B 【试题解析】 根据派生类构造函数的一般格式:派生类名 (总参数表 ):基类名 1 (参数表 1 ), 基类名 n (参数表 n ),成员对象名 1(参数表 n+1 ), 成员对象名 m (参数表 n+m )派生类构造函数体。在派生类 BB的构造函数总参数表后面应该接上基类名 AA和其参数。 【知识模块】 继承和派生 26 【正确答案】 D 【试题解析】 程序在创建派生类对象 d时,分别调用基类 Base1和 Base1的构造函数。 【知识模块】 继承和派生

展开阅读全文
相关资源
猜你喜欢
  • AECMA PREN 3500-1995 Aerospace Series Titanium Alloy TI-P11 Annealed 540 Less Than or Equal to Rm Less Than or Equal to 700 MPa Sheet and Strip a Less Than or Equal to 6 mm Edition.pdf AECMA PREN 3500-1995 Aerospace Series Titanium Alloy TI-P11 Annealed 540 Less Than or Equal to Rm Less Than or Equal to 700 MPa Sheet and Strip a Less Than or Equal to 6 mm Edition.pdf
  • AECMA PREN 3501-1995 Aerospace Series Titanium Alloy TI-P11 Solution Treated and Aged 690 Less Than or Equal to Rm or Less Than or Equal to 920 MPa Sheet and Strip a Less Than or E.pdf AECMA PREN 3501-1995 Aerospace Series Titanium Alloy TI-P11 Solution Treated and Aged 690 Less Than or Equal to Rm or Less Than or Equal to 920 MPa Sheet and Strip a Less Than or E.pdf
  • AECMA PREN 3504-1993 Aerospace Series Titanium and Titanium Alloys Circular Tubes for Fluids Close Tolerances Diameter 3 2 mm Less Than or Equal to D Less Than or Equal to 50 mm Thn.pdf AECMA PREN 3504-1993 Aerospace Series Titanium and Titanium Alloys Circular Tubes for Fluids Close Tolerances Diameter 3 2 mm Less Than or Equal to D Less Than or Equal to 50 mm Thn.pdf
  • AECMA PREN 3506-1996 Aerospace Series Hot Rolled Sheets and Plates in Heat Resisting Alloys Thickness 2 0 mm Less Than or Equal to a Less Than or Equal to 100 mm Dimensions Edition.pdf AECMA PREN 3506-1996 Aerospace Series Hot Rolled Sheets and Plates in Heat Resisting Alloys Thickness 2 0 mm Less Than or Equal to a Less Than or Equal to 100 mm Dimensions Edition.pdf
  • AECMA PREN 3507-1998 Aerospace Series Steel FE-PL1501 (30CrMo12) Air Melted Hardened and Tempered Forgings De Less Than or Equal to 100 mm 930 MPa Less Than or Equal to Rm Less Tha.pdf AECMA PREN 3507-1998 Aerospace Series Steel FE-PL1501 (30CrMo12) Air Melted Hardened and Tempered Forgings De Less Than or Equal to 100 mm 930 MPa Less Than or Equal to Rm Less Tha.pdf
  • AECMA PREN 3508-1998 Aerospace Series Steel FE-PL1501 (30CrMo12) Air Melted Hardened and Tempered Bar De Less Than or Equal to 100 mm 930 MPa Less Than or Equal to Rm Less Than or .pdf AECMA PREN 3508-1998 Aerospace Series Steel FE-PL1501 (30CrMo12) Air Melted Hardened and Tempered Bar De Less Than or Equal to 100 mm 930 MPa Less Than or Equal to Rm Less Than or .pdf
  • AECMA PREN 3509-1998 Aerospace Series Steel FE-PL1501 (30CrMo12) Air Melted Hardened and Tempered Bar De Less Than or Equal to 40 mm 1 050 MPa Less Than or Equal to Rm Less Than or.pdf AECMA PREN 3509-1998 Aerospace Series Steel FE-PL1501 (30CrMo12) Air Melted Hardened and Tempered Bar De Less Than or Equal to 40 mm 1 050 MPa Less Than or Equal to Rm Less Than or.pdf
  • AECMA PREN 3510-1997 Aerospace Series Heat Resisting Steel FE-PA2602 (X4NiCrTiMoV26-15) Solution Treated and Precipitation Treated Bar and Section De Less Than or Equal to 100 mm E.pdf AECMA PREN 3510-1997 Aerospace Series Heat Resisting Steel FE-PA2602 (X4NiCrTiMoV26-15) Solution Treated and Precipitation Treated Bar and Section De Less Than or Equal to 100 mm E.pdf
  • AECMA PREN 3511-1999 Aerospace Series Steel FE-PL1801 (100Cr6) Vacuum Induction Melted and Consumable Electrode Remelted Softened Bar for the Manufacture of Machined Bearings a or .pdf AECMA PREN 3511-1999 Aerospace Series Steel FE-PL1801 (100Cr6) Vacuum Induction Melted and Consumable Electrode Remelted Softened Bar for the Manufacture of Machined Bearings a or .pdf
  • 相关搜索

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

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