ImageVerifierCode 换一换
格式:DOC , 页数:29 ,大小:69KB ,
资源ID:497731      下载积分:2000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-497731.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文([计算机类试卷]国家二级C++机试(类和对象)模拟试卷1及答案与解析.doc)为本站会员(outsidejudge265)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

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

1、国家二级 C+机试(类和对象)模拟试卷 1及答案与解析 一、选择题 1 有如下类声明: class Fooint bar; ; 则 Foo类的成员 bar是 ( )。 ( A)公有数据成员 ( B)公有成员函数 ( C)私有数据成员 ( D)私有成员函数 2 有如下类定义: class Foo public: Foo(int v): value(v) Foo() private: F000 int value=0; ); 其中存在语法错误的行是 ( )。 ( A) ( B) ( C) ( D) 3 有如下类定义: class Test public: Test()a=0; C=0; int f

2、(int a)constthis a: a; static int g()return a; ) void h(int b)Test: b=b; ; private: int a; static int b; const int c; ); int Test: b=0: 在标注号码的行中,能被正确编译的是 ( )。 ( A) ( B) ( C) ( D) 4 有如下类声明: class SAMPLE int n; public: SAMPLE(int i=0): n(i)() void setValue(int n0); ); 下列关于 getValue成员函数的实现中,正确的是 ( )。 (

3、 A) SAMPLE: setValue(int nO)n=nO; ) ( B) void SAMPLE: setValue(int nO)n=n0; ( C) void setValue(int nO)n=nO; ( D) (int nO)n=n0; 5 以下关键字不能用来声明类的访问权限的是 ( )。 ( A) public ( B) static ( C) protected ( D) private 6 下列关于类定义的说法中,正确的是 ( )。 ( A)类定义中包括数据成员和函数成员的声明 ( B)类成员的缺省访问权限是保护的 ( C)数据成员必须被声明为私有的 ( D)成员函数只能

4、在类体外进行定义 7 如果派生类以 protected方式继承基类,则原基类的 protected成员和 public成员在派生类中的访问属性分别是 ( )。 ( A) public和 public ( B) public和 protected ( C) protected和 public ( D) protected和 protected 8 下列有关类成员的叙述中,正确的是 ( )。 ( A)友元函数是类的成员函数 ( B)类成员的默认访问权限是私有的 ( C)类成员函数必须声明为公有的 ( D)类的静态数据成员不能是常成员 9 下列运算符函数中,肯定不属于类 Value的成员函数的是 (

5、 )。 ( A) Value operator+(Value); ( B) Value operator-(Value Value); ( C) Value operator木 (int); ( D) Value operator (Value); 10 有如下程序: #include #include using namespace std; class XCD char*a: int b: public: XCD(char*aa, int bb) a=new charstrlen(aa)+1; strcpy(a, aa); b=bb; char*GetaOreturn a; ) int G

6、etb0return b; ; int main) char*pl=“abcd”, *p2=”weirong”; int dl=6, d2=8; XCD x(pl, d1), y(p2, d2); cout strlen(x Geta0)+y Getb0 endl; return 0; ) 运行时的输出结果是 ( )。 ( A) 12 ( B) 16 ( C) 14 ( D) 1 1 11 有如下两个类定义 : class AA); class BB AA vl, *v2; BB v3: int*v4; ); 其中有一个成员变量的定义是错误的,这个变量是 ( )。 ( A) vl ( B) v

7、2 ( C) v3 ( D) v4 12 有如下程序: #include using namespace std; class Point int X, y; public: Point(int xl=0, int yl=0): x(x1), y(y1)() int get()return x+y; ) ); class Circle Point center; int radius; public: Circle(int CX, int cy, int r): center(cx, cy), radius(r) int get0retum center get0+radius; ); int

8、 main() Circle c(3, 4, 5); cout c get() endl; return 0: ) 运行时的输出结果是 ( )。 ( A) 5 ( B) 7 ( C) 9 ( D) 12 13 若 AA为一个类, a为该类的私有整型数据成员, getA0为该类的一个非静态公有成员函数,功能是返回 a的值。如果 X为该类的一个对象,要在类外访问 X对象中 a的值,正确的访问格式为 ( )。 ( A) AA getA() ( B) x。 getA() ( C) x a ( D) AA: a 14 有如下类定 义: class MyClass int b; char a; doubl

9、e c; public: MyClass0: c(0 0), b(O), a(, )() ; 创建这个类的对象时,数据成员的初始化顺序是 ( )。 ( A) a,b, C ( B) c,b, a ( C) b, a, c ( D) c,a, b 15 下列关于类和对象的叙述中,错误的是 ( )。 ( A)一个类只能有一个对象 ( B)对象是类的具体实例 ( C)类是对某一类对象的抽象 ( D)类和 对象的关系是一种数据类型与变量的关系 16 若有如下类声明 class MyClass public: MyClass()cout using namespace std; class Pair i

10、nt m, n; public: Pair(intj, int k): m(j), n(k) int get()return m; int getoconstretum m+n; ; int main() Pair a(3, 5); const Pair b(3, 5); cout a get() b get(); retum 0; ) 运行时的输出结果是 ( )。 ( A) 33 ( B) 38 ( C) 83 ( D) 88 22 有如下类定义: class MyClass int x; public: MyClass(): x(0), y(0) int GetX()return x; )

11、 void SetX(int xx)x=xx; ) int y; ; 已知 obj是类 MyClass的对象,下列语句中违反类成员访问控制权限的是 ( )。 ( A) obj x ( B) obj Y ( C) obj GetX() ( D) obj SetX(0) 23 有如下程序: #include using namespace std; class Point public: static int number; public: Pointonumber+; -Point()number-一; ) ); int Point: number 0; void main0 Point*ptr

12、; PointA, B; Point*ptr_point=new Point3; ptx=ptr_point; ) Point C: Gout+Point: number+endl; deleteptr; ) 运行时输出的结果是 ( )。 ( A) 3 ( B) 4 ( C) 6 ( D) 7 24 在下列函数原型中,可以作为类 AA构造函数的是 ( )。 ( A) void AA(int); ( B) intAA(); ( C) AA(int)const; ( D) AA(int); 25 有如下类定义: class Point int X一, y; public: Point(): x一

13、(O), Y一 (O) Point(int X, int Y=0): X_(x), y (y) ; 若执行语句 Point a(2), b3, *c4; 则 Point类的构造函数被调用的次数是 ( )。 ( A) 2次 ( B) 3次 ( C) 4次 ( D) 5次 26 下列情况中,不会调用拷 贝构造函数的是 ( )。 ( A)用一个对象去初始化同一类的另一个新对象时 ( B)将类的一个对象赋值给该类的另一个对象时 ( C)函数的形参是类的对象,调用函数进行形参和实参结合时 ( D)函数的返回值是类的对象,函数执行返回调用时 27 有如下程序 #include #include using

14、 namespace std; class MyClass public: MyClass()cout A; ) MyClass(char c)cout using namespace std; class test private: int a: public: test0cout+”constructor”+endl; test(int a)cout+a+endl; ) test(const test&test) a=test a: cout+“copy constructor”+endl; ) test()Cout+”destructor”+endl; ) ); int main() t

15、est A(3); return 0: 运行时输出的结果是 ( )。 ( A) 3 ( B) constructor destructor ( C) copy constructor destructor ( D) 3 destructor 29 对于一个类定义,下列叙述中错误的是 ( )。 ( A)如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数 ( B)如果没有定义缺省的构造函 数,编译器将一定生成一个缺省的构造函数 ( C)如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数 ( D)如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数 30 有如下程

16、序: #include using namespace std; class Part public: Part(int x=0): val(x)cout val; -Part()cout val; ) private: int val; ); class Whole public: Whole(int x, int y, int z=O): p2(x), pl(y), val(z)cout using namespace std; class Base public: Base(int x=0)cout x; ) ; class Derived: public Base public: De

17、rived(int x=0)cout x; ) private: Base val; ); int main() Derived d(1); return 0: 程序的输出结果是 ( )。 ( A) 0 ( B) 1 ( C) 01 ( D) 001 32 有如下类定义: class MyClass Int value; public; MyClass(int n): value(n) int gerValueoconstreturn value; ) ; 则类 MyClass的构造函数的个数是 ( )。 ( A) 1个 ( B) 2个 ( C) 3个 ( D) 4个 33 在 C+中,编译系

18、统自动为一个类生成缺省构造函数的条件是 ( )。 ( A)该类没有定义任何有参构造函数 ( B)该类没有定义任何无参构造函数 ( C)该类没有定义任何构造函数 ( D)该类没有定义任何成员函数 34 有如下程序: #include using namespace std; class Sample public: Sample() -Sample()cout using namespace std; class MyClass public: MyClass(int i=0)cout l; ) MyClass(const MyClass&x)cout 2; MyClass&operator=(

19、const MyClass&x)cout #include using namespace std; class XCF int a; public: XCF(int aa=0): a(aa)cout ”1”; ) XCF(XCF&X)a=x a; cout ”2”; ) -XCFOcout using namespace std; class ONE int c; public: ONE(): c(0)cout using namespace std; class Toy public: Toy(char*一 n)strcpy(name,一 n); count+; ) Toy0count一;

20、 ) char*GetName0return name; static int getCount0return count; ) private: char name10; static int count; ); int Toy: count=0; int main() Toy tl(”Snoopy”), t2(”Mickey”), t3(”Barbie”); cout t 1 getCount() endl; return O: ) 运行时的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D)运行时出错 40 有如下程序: #include using namespac

21、e std; class Name char name20; public: Name() strcpy(name, “); cout ?; Name(char*fname) strcpy(name, fname); cout ?; ) ; int main() Name names3=Name(“张三 “), Name(“李四 “); return 0: 运行此程序输出符号 ?的个数是 ( )。 ( A) 0 ( B) 1 ( C) 2 ( D) 3 国 家二级 C+机试(类和对象)模拟试卷 1答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 此题考查的是类的定义。在定义类的成员变

22、量时,如果没有使用关键字;所有成员默认定义为 private私有权限。 2 【正确答案】 D 【试题解析】 此题考查的是类的定义。 c+语言规定,在类体内不允许对所定义的数据成员进行初始化。 3 【正确答案】 D 【试题解析】 此题考查的是类的定义。一个类的长数据成员的初始化只能在成员初始化列表中进行,故选项 A错误;常成员函数不能更新对象的数据成 员,故选项 B错误;静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员,故选项 C错误。 4 【正确答案】 B 【试题解析】 此题考查了成员函数的定义格式。在类外部对成员函数定义时的一般格式为:返回类型类名:成员函数名

23、(参数表 )函数体 ,故此题正确答案为选项 B。 5 【正确答案】 B 【试题解析】 此题考查的是类的访问权限。在 C+语言中,类的访问权限有公有、保护和私有三种。故本题选 B。 6 【正确答案】 A 【试题解析】 此题考查的是类的定义。类中 缺省的访问权限是私有的,所以选项B错误;类的数据成员和成员函数的访问控制权限均可被声明为公有、私有和保护中的一种,所以选项 c错误:成员函数的实现可以在类体内定义,也可以在类体外定义,所以选项 D错误。 7 【正确答案】 D 【试题解析】 此题考查的是基类成员存派生类巾的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员

24、。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成 私有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。 8 【正确答案】 B 【试题解析】 此题考查的是类成员的有关概念。类的友元函数可以直接访问该类的所有成员,但它不是类的成员函数,故选项 A错误;类成员函数的访问权限可以声明为公有、保护、私有,故选项 c错误;静态数据成员的声明是使用关键字static,它可以是常成员,故选项 D错误。 9 【正确答案】 B 【试题解析】 运算符作为非

25、成员函数时,由于没有隐含 this指针,因此所有的操作数必须出现在参数表中。对于第二个选项,出现了两个操作数,必然是非成员函数,但是对于其他三个选项,有可能都是要求两个操作数的成员函数。 10 【正确答案】 A 【试题解析】 由类 XCD的定义可知,成员函数 Geta()返回的是字符串的长度,Getb()返回的是参数 b的值。在主函数中 strlen(x Geta()的值等于 4, y Getb()的值等于 8,所以输出两者的和为 12。 11 【正确答案】 C 【试题解析】 在定义类的数据成员时,类中的数据成员可以是任意类型,包括整型、浮点型、字符符 型、数组、指针和引用等,也可以是对象。但

26、是要注意,只有另外一个类的对象,才可以作为该类的成员,即作为类的成员对象存在。自身类的对象是不可以作为自身类的成员存在,但自身类的指针可以。对于本题,在定义类 BB时,不能包括其对象 v3。 12 【正确答案】 D 【试题解析】 根据类 Point和类 Circle的定义可知,类 Circle的实例 c(3, 4, 5)的成员函数 c get()返回值为 3+4+5=12。 13 【正确答案】 B 【试题解析】 要在类外访问 x对象中 a的值,必须调用类的非静态公有成员函 数getA()。 14 【正确答案】 C 【试题解析】 类的成员初始化顺序与成员变量在构造函数中的位置先后顺序无关,只与成

27、员变量在类中定义的先后顺序有关。 15 【正确答案】 A 【试题解析】 此题考查的是类和对象的概念。类是用户定义的一种数据类型,可以使用这个类型来说明一个或多个变量,即对象。 16 【正确答案】 B 【试题解析】 此题考查的是对象的构造。本题共声明了一个 Myclass对象 a,一个包含 2个 MyClass对象的数组 b和一个包含 2个 Myclass对象指针的数组 p, 所以一共创建了 3个 Myclass类的对象,即调用了 3次构造函数。 17 【正确答案】 B 【试题解析】 建立一个类的对象时,编译程序需要为对象分配存储空间,进行必要的初始化。在 c+中,这项工作是由构造函数来完成。

28、18 【正确答案】 C 【试题解析】 c1、 *C2、 c3是 3个 Myclass对象, c4是 MyClass对象的引用,它是对象 C1的别名。 19 【正确答案】 D 【试题解析】 在选项 D)中,定义了 MyClass类的一个对象 a和引用变量 p,并且声明 p初始化为对 a的引用。 20 【正确答案】 C 【试题解析】 建立对象时根据给定的参数调用相应的构造函数对对象进行初始化。无参数时表示调用缺省构造函数。构造函数在对象被创建时由系统自动调用。 21 【正确答案】 B 【试题解析】 在主函数中定义了类 Pair的一个实例变量 a,并分别对实例变量 a的数据成员 m, n赋初值 3,

29、 5。所以调用 a get()成员函数时,输出 3。又定义类Pair的一个常实例变量 b,并分别对实例变量 b的数据成员 m, n赋初值 3, 5。所以调用成员函数 b get()时,输出 8。 22 【正确答案】 A 【试题解析】 由类 MyClass的定义可知,数据成员 x属于私有成员,所以只能存类的内部访问。类 Myclass的对象 obj不能访问类 MyClass的私有成员 x。 23 【正确答案】 C 【试题解析】 此题是静态成员、对象的构造和对象的生存期等知识点的综合考查。此题定义了一个静态成员变量 number,初始值为 0。土函数中第 2行定义了2个 Point对象,此时 nu

30、mber变为 2;随后 new运算符又定义了一个包含 3个Point对象元素的数组,其通过 delete结束后 number的值变为 5;然后又 定义了一个 Point对象 C, number变为 6;最后输出 number的内容。 24 【正确答案】 D 【试题解析】 此题考查的是构造函数的概念。构造函数是类的一个特殊成员函数,它与类同名,并且没有返回值。选项 A、 B不符合要求。选项 c中函数 AA,会更新对象的数据成员。 25 【正确答案】 C 【试题解析】 此题考查的是类的构造函数。构造函数在对象创建的时候由系统自动调用。在 Point a(2), b3, *c4语句中: a(2)是定

31、义一个对象并传入构造函数2,所以此时会调用以此构造函数 ; b3是定义一个包含 3个对象的数组,所以构造函数会被调用 3次; *c【 4定义的是 4个 Point类对象指针的数组,它并没有创建任何 Point对象,所以不调用构造函数。 26 【正确答案】 B 【试题解析】 此题考查的是复制构造函数的概念。用一个已知的对象初始化一个正在创建的同类对象时,就会发生复制构造函数。因此,选项 A、 C、 D均会调用复制构造函数,而只有选项 B没有创建的动作,不调用复制构造函数。 27 【正确答案】 D 【试题解析】 此题考查的是构造函数和析构函数。构造函数在对象被创建 的时候由系统自动调用,而析构函数

32、在对象的生存期即将结束的时候由系统自动调用。此题中,主程序在创建 Mayclass类的对象 p1时,调用 MayClass类的默认构造函数,输出字母 A;然后在创建 *p2对象时,调用带字母参数的构造函数,输出字母x;语句 delete p2;调用析构函数,输出字母 B;在主函数退出时,调用析构函数清除对象 p1,输出字母 B。 28 【正确答案】 D 【试题解析】 此题考查的是构造函数和析构函数。一个类可以有多个构造函数,但只能有一个析构函数。每一个对象在被创建时,都会隐含调用众多 构造函数中的一个,而在销毁时又会隐含调用唯一的析构函数。此题中,主函数创建对象 A是会隐含调用 test(in

33、t a)这个构造函数,输出 3:接着主函数结束,对象 A销毁又隐含调用 test()析构函数输出 destructor。 29 【正确答案】 B 【试题解析】 此题考查的是构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。 30 【正确答案】 B 【试题解析】 此题考查的是类的构造与析构。建立类 的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声叫的顺序 (自左向右 )接着执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序,最后执行自身的构造函数。析构

34、顺序与之相反。本题中, Whole类中 _仃两个 Part类的成员 p1和 p2,根据它们定义的顺序,先构造 p1再构造 p2。所以,首先被构造的是 pl(y),输出 2;第二个被构造的是 p2(x),输出 1;最后调用析构函数,输出 val的值 3;析构函数调用顺序与构造函数相反。故最后输出 213312。 31 【正确答案】 D 【试题解析】 此题考查的是类的构造。建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序 (自左向右 ) 执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序 执行自身的构造函数。本题中,首先会构造基类 B

35、ase,调用 Base类的构造函数,输出 0;然后还定义了一个 Base类的对象,再次调用 Base类的默认构造函数输出 0;最后构造自身,因主函数中传入了构造参数 l,所以输出 1。故最后输出结果是: 001。 32 【正确答案】 A 【试题解 析】 此题考查的是构造函数的概念。构造函数的名字必须与类名相同:构造函数不指定返回值类型;构造函数可以重载;在创建对象时,系统会自动调用构造函数。 33 【正确答案】 C 【试题解析】 如果一个类中定义了一个缺省的构造函数,则使用该函数。如果一个类中没有定义任何构造函数,编泽器将生成一个不带参数的共有缺省构造函数。 34 【正确答案】 B 【试题解析

36、】 在 main函数叶 1,定义了 Sample temp2】的一个包含两个对象的数组,还定义了一个 *pTemp2,是包含两个指向类对象的指 针的数组,故定义的指针当 main函数结束后是不会调用析构函数的,只有包含两个对象的数组 temp2会调用析构函数,因此只输出两个 *。 35 【正确答案】 A 【试题解析】 当创建 MyClass类对象 objl(1)和 obj2(2)时候,调用类构造函数会输出两个 l,然后创建类对象 obj3(obj(1)时,会调用拷贝类构造函数,输出一个2,然后当 main函数结束时候,调用三个对象的析构函数会输出三个 4。 36 【正确答案】 B 【试题解析】

37、 在这个程序中在建立对象 dl(5)时,调用构造函数 XCF (int aa=0):a(aa)coutGeta()的功能是输出 8;语句 delete pd;调用析构函数 XCF(),输出 8;当退出程序时,分别释放对象 d2、 d1,输出 55。 37 【正确答案】 C 【试题解析】 由类 TWO的定义可知,其成员为类 ONE的两个对象 onel和one2。所以在主函数中构建类 TWO的对象 t(4)时,先后调用类 ONE的构造函数ONE(): c(0)toutl1; 和 ONE(int n): c(n)cout2; 输出 12,然后再调用类TWO的构造函数 TWO(int m): one2

38、(m)cout3; ,输出 3。 38 【正确答案】 D 【试题解析】 在 C+中,声明一个类对象时,编译程序需要调用类的构造函数为对象分配存储空间,进行必须的初始化。在本题的这条语句 |1,声明了一个Sample类型的包含 2个数组元素的数组 a2,一个指向类 Sample对象的指针 P,所以 Sample类的构造函数共调用了 3次。 39 【正确答案】 C 【试题解析】 类 Toy中包含一个字符数组 name和一个静态整型变量 count。在程序中首先给类 Toy的成员 count的赋初始值 0,然后在主函数中,定义了三个Toy对象 t1、 t2、 t3,并分别对它们的 name字段赋值,在赋值的同时变量 count的值加 l,所以最后变量 count的值等于 3。 40 【正确答案】 D 【试题解析】 类 Name有两 个构造函数,在默认构造函数中,给字符数组。Flame赋窄值,并输出一个 ?;在带有字符指针的构造函数中,把字符指针 fname所指的字符串赋给字符数组 name,并输出一个 ?。所以在主函数中,定义了 Name的三个对象, Flame0、 name1、 name2,在创建这三个对象时,会调用构造带参数的函数对前两个对象赋值,调用默认的构造函数把 name2的值赋为空值。这时会输出 j个 “?”符号。

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