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

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

1、国家二级 C+机试(继承和派生)模拟试卷 1及答案与解析 一、选择题 1 有如下类声明: class XA int x; public: XA(int n)x-n; ) ); class XB: public XA int y; public: XB(int a, int b); ); 在构造函数 XB的下列定义中,正确的是 ( )。 ( A) XB: XB(int a, int b): x(a), y(b) ( B) XB: XB(int a, int b): XA(a), y(b) ( C) XB: XB(int a, int b): x(a), xB(b) ( D) XB: XB(int

2、 a, int!): XA(a), XB(b) 2 有如下程序: #include using namespace std; class BASE public: -BASE0cout using namespace std; class Base public: void fun()cout using namespace std; class Base private: void funl 0 constcout using namespace std; class AA int k; protected: int n: void setK(int k)this一 k=k; ) publi

3、c: 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 (): ) 在标注号码的四条语句中正确的是 ( )。 ( A) l ( B) 2 ( C) 3 ( D) 4 31 有如下两个类定义 class XX private: double xl; protected: dOuble x2; public: double x3; ; class YY: protected XX private:

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

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

6、保护成员 ( C)派生类成员函数可以访问基类的所有成员 ( D)派生类对基类的默认继承方式是公有继承 35 有如下类定义: class B public: void funl0) private: void tim20) protected: void fun30) ); class D: public B protected: void fun40) ; 若 obj是类 D的对象,则下列语句中不违反访问控制权限的是 ( )。 ( A) obj funl(); ( B) obj fun2(); ( C) obj fun30; ( D) obj fun40; 36 有如下程序: class Ba

7、se public: int data; ); class Derivedl: public Base; class Deriv ed2: protected Base; int main() Derivedl dl; Derived2 d2; d1 data=0: d2 data=0: return 0: ) 下列关于程序编译结果的描述中,正确的是 ( )。 ( A) 皆无编译错误 ( B) 有编泽错误, 无编译错误 ( C) 无编译错误, 有编译错误 ( D) 皆有编译错误 37 有如下程序: #include using namespace std; class XX int x; pu

8、blic: 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 get()return getX0+y; ) ); int main() YY c(3, 4); cout using namespace std; class Media public: void Name(); void Show(); protected: int page; ; class Book: private Media public

9、: void Print() cout using namespace std; class A public: AOcout using namespace std; class A public: AOcout不可见: protected-priVate; public一 protected。 18 【正确答案】 B 【试题解析】 此题考查的是继承的使用。分析题目可知,横线处应填入 对基类成员函数 fun()的调用语句,此处只能使用作用域运算符 “: ”才能调用到基类的同名函数,故选项 B正确。 19 【正确答案】 B 【试题解析】 此题考查的是保护继承。因为 Derived以 prote

10、cted方式继承了Base类,所以父类 Base中的公有成员和保护成员均成了 Derived类的保护成员,而 Base类的私有成员 Derived类不可访问。所以,主函数中通过 Derived类的对象只能够访问到 Derived类的公有成员。 20 【正确答案】 B 【试题解析】 此题考查的是派生类对基 类成员的访问。基类的成员有公有、保护和私有 j种访问属性;类的继承方式也有公有继承、保护继承和私有继承三种。无论那种继承方式,派生类中的成员都不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员。 21 【正确答案】 A 【试题解析】 此题考查的是派生类对基类成员的访问。冈为类中缺省

11、的访问权限是私有,所以本题中 MyBase类中定义的成员 k是私有成员。派生类中的成员只能访问基类中的公有成员和保护成员,不能访问基类中的私有成员。所以派生类中函数 getK()中的语句 returnk;是非法的。 22 【正确答案】 C 【试题解析】 此题考查的是派生类对基类成员的访问。派生类对基类的各个成员的访问能力与继承方式无关,其成员不能访问基类中的私有成员,可以访问基类的公有成员和保护成员。 23 【正确答案】 C 【试题解析】 此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员

12、和保护成员在派生类中仍然是公有成员和保护成员:派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成 私有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。根据以上分析可知,本题中只有从B类继承的 fun2()为公有属性,故选 C选项。 24 【正确答案】 B 【试题解析】 此题考查的是派生类对基类成员的访问权限。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类

13、中都变成私有成员; 派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。 25 【正确答案】 A 【试题解析】 在派生类对基类的三种继承形式中,都无法对基类的私有成员访问A正确。在 B中,三种继承方式都能访问基类的保护成员,故 B不正确。 C选项的情况在 f()是基类私有成员情况下是对的,但是还有别的可能,并不一定正确。同样 D也不一定正确。 26 【正确答案】 D 【试题解析】 通过公有继承定义的派生类,其成员函数可以访问基类的公有成员和保护成员,但不能访问基类的私 有成员。 27 【正确答案】 C 【试题解析】 建立派生类对象的时候,构造函

14、数的执行顺序如下:执行基类的构造函数,调用的顺序按照基类被继承时候的顺序 (白左阳右 )。然后是执行成员对象的构造函数,调用顺序按照各个成员对象在类中的声明顺序 (自上而下 ),最后是执行派生类的构造函数。 28 【正确答案】 A 【试题解析】 基类 Patrents的私有成员 privateData在派生类 ChildA和 ChildB中是不可以访问,所以选项 B、 D是错误,而派生类 ChildB私有继承基类Parents,所以基 类 Parents的公有成员 publ。 icData存派生类 childB中变为私有成员,只能在派生类 ChildB内部访问,因而选项 C是错误的。派生类 c

15、hildA公有继承基类 Parents,所以基类 Parents的公有成员 publicData在派生类 childA中可以访问。 29 【正确答案】 A 【试题解析】 基类的私有成员在派生类中都是不能访问的,所以选项 B、 D是错误的,基类的公有成员通过私有继承后,在派生类中变为了私有成员,只能在派生类中进行访问,而通过派生类的对象不能访问,所以选项 c也是错误的 。基类的公有成员通过公有继承后,在派生类种是公有成员,所以町以通过派生对象来访问。 30 【正确答案】 B 【试题解析】 因为类 BB公有继承自类 AA,所以 AA中的保护成员和公有成员在类 BB中仍是保护成员和公有成员。在选项

16、B中调用了公有成员函数setN(intn)fthis-n=n; ,对保护成员 n进行赋值操作。 31 【正确答案】 C 【试题解析】 在 c+中派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍为保护成员。所以对于本题来说,YY类保 护继承白类 xx,那么类 xx中的公有成员 x3和保护成员 x2在派生类中都成为保护成员,再加上类 YY中的保护成员 y2,因此存派生类 YY中保护成员的个数为 3。 32 【正确答案】 C 【试题解析】 派生类 Jazz不能访问基类 Music中的私有成员 title。 33 【正确答案】 B 【试题解析】 基类的公有成员

17、和保护成员只有在以保护继承方式继承时,其在继承类中是保护成员。 34 【正确答案】 B 【试题解析】 派牛类不论是采用那种继承方式继承基类,它的成员函数只能访问基类的公有成员和保 护成员。 35 【正确答案】 A 【试题解析】 派生类 D公有继承父类 B,所以 obj町以访问基类 B的公有,不能访问其它成员。 36 【正确答案】 C 【试题解析】 保护继承的类 DerlVied2不能访问基类 Base中的公共数据成员data。 37 【正确答案】 D 【试题解析】 由于类 YY公开继承自类 xx,所以执行表达式 c getV()+c getX()的值等于 3+3+4=10。 38 【正确答案】

18、 B 【试题解析】 类 Book私有继承白类 Media,所以类 Media中 的公有成员函数Name()在继承类 Book中变成了私有成员函数,冈而类 Book的对象 Bible不能访问私有成员函数 Name()。 39 【正确答案】 D 【试题解析】 此题考查的是类的继承和派生。系统首先要通过派生类的构造函数调用基类的构造函数,对基类成员初始化;然后对派生类中的新增成员初始化。 40 【正确答案】 B 【试题解析】 此题考查的是派生类对象的构造与析构。建立派生类对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被定义时声明的顺序 (自左向有 )一 执行 成员对象的构造

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

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

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

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