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

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

1、国家二级 C+机试(类和对象)模拟试卷 3及答案与解析 一、选择题 1 有如下类声明: class Foo int bar; ; 则 Foo类的成员 bar是 ( )。 ( A)公有数据成员 ( B)公有成员函数 ( C)私有数据成员 ( D)私有成员函数 2 有如下类声明: class SAMPLE int n; public: SAMPLE(int i=0): n(i) void setValue(int n0); ; 下列关于 getValue成员函数的实现中,正确的是 ( )。 ( A) SAMPLE: setValue(int n0)n=n0; ( B) void SAMPLE: s

2、etValue(int n0)n=n0; ( C) void setValue(int n0)n=n0; ( D) (int n0)n=n0; 3 如果派生类以 protected方式继承基类,则原基类的 protected成员和 public成员在派生类中的访问属性分别是 ( )。 ( A) public和 public ( B) public和 protected ( C) protected和 public ( D) protected和 protected 4 有如下程序: #include iostream #include cstring using namespace std;

3、class XCD char* a; int b; public: XCD(char* aa, int bb) a=new charstrlen(aa)+1; strcpy(a, aa); b=bb; char* Geta()return a; int Getb()return b; ; int main() char *p1=“abcd“, *p2=“weirong“; int d1=6, d2=8; XCD x(p1, d1), y(p2, d2); cout strlen(x Geta()+y Getb() endl; return 0; 运行时的输出结果是 ( )。 ( A) 12 (

4、 B) 16 ( C) 14 ( D) 11 5 若 AA为一个类, a为该类的私有整型数据成员, getA()为该类的一个非静态公有成员函数,功能是返回 a的值。如果 x为该类的一个对象,要在类外访问 x对象中 a的 值,正确的访问格式为 ( )。 ( A) AA getA() ( B) x getA() ( C) x a ( D) AA: a 6 若有如下类声明 class MyClass public: MyClass()cout 1; ; 执行下列语句 MyClass a, b2, *p12: 以后,程序的输出结果是 ( )。 ( A) 11 ( B) 111 ( C) 1111 (

5、D) 11111 7 要定义一个引用变量 p,使之引用类 MyClass的一个对象,正确的定义语句是( )。 ( A) MyClass p=MyClass; ( B) MyClass p=new MyClass; ( C) MyClass &p=new MyClass; ( D) MyClass a, &p=a; 8 有如下类定义: class MyClass int x; public: MyClass(): x(0), y(0) int GetX()return x; void SetX(int xx)x=xx; int y; ; 已知 obj是类 MyClass的对象,下列语句中违反类成

6、员访问控制权限的是 ( )。 ( A) obj x ( B) obj y ( C) obj GetX() ( D) obj SetX(0) 9 有如下类定义: class Point int x_, y_; public: Point(): x_(0), y_(0) Point(int x, hat y=0): x_(x), y_(y) ; 若执行语句 Point a(2), b3, *c4; 则 Point类的构造函数被调用的次数是 ( )。 ( A) 2次 ( B) 3次 ( C) 4次 ( D) 5次 10 有如下程序: #include iostrearn using namespac

7、e 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 constmctor“+endl; test()Cout+“destructor“+endl; ; int main() test A(3); return 0; 运行时输出的结果是 ( )。 ( A) 3 ( B) constructor destmctor ( C) copy constructor destruc

8、tor ( D) 3 destructor 11 有如下程序: #include iostream using namespace std; class Base public: Base(int x=0)cout x; ; class Derived: public Base public: Derived(int x=0)cout x; private: Base val; ; int main() Derived d(1); return 0; 程序的输出结果是 ( )。 ( A) 0 ( B) 1 ( C) 01 ( D) 001 12 有如下程序: include ioStream

9、using namespace std; class Sample public: Sample() Sample()cout *; ; int main() Sample temp2, *pTemp2; return 0; 执行这个程序输出星号 (*)的个数为 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 13 有如下程序: #include iostream using namespace std; class ONE int c; public: ONE(): c(0)cout 1; ONE(int n): c(n)cout 2; ; class TWO ONE on

10、e1; ONE one2; public: TWO(int m): one2(m)cout 3; ; int main() TWO t(4); return 0; 运行时的输出结果是 ( )。 ( A) 3 ( B) 23 ( C) 123 ( D) 213 14 有如下程序: 撑 include iostream using namespace std; class Name char name20; public: Name() strcpy(name, “); cout ?; Name(char *fname) strepy(name, fname); cout ?; ; int mai

11、n() Name names3=Name(“张三 “), Name(“李四 “); return 0; 运行此程序输出符号 ?的个数是 ( )。 ( A) 0 ( B) 1 ( C) 2 ( D) 3 15 有如下程序: #include iostream using namespace std; class CD public: CD0cout C; private: char name80; ; int main()CD a, *b, d2; return 0; 运行时的输出结果是 ( )。 ( A) CCCC ( B) CCC ( C) CC ( D) C 16 下列关于构造函数的描述中

12、,错误的是 ( )。 ( A)构造函数名与类名相同 ( B)构造函数可以有返回值 ( C)构造函数可以重载 ( D)每个类都有构造函数 17 有如下程序: #include iostream using namespace std; class Monkey public: Monkey()cout M; Monkey(char n)cout n; Monkey()cout Y; ; int main() Monkey p1, *p2; p2=new Monkey(X); delete p2; return 0: 运行这个程序的输出结果是 ( )。 ( A) MYX ( B) MYMY ( C

13、) MXY ( D) MXYY 18 下列关于 this指针的叙述中,正确的是 ( )。 ( A)任何与类相关的函数都有 this指针 ( B)类的成员函数都有 this指针 ( C)类的友元函数都有 this指针 ( D)类的非静态成员函数才有 this指针 19 下列关于 this指针的插述中,正确的是 ( )。 ( A)类的成员函数都有 this指针 ( B)类的友元函数都有 this指针 ( C)任何与类相关的函数都有 this指针 ( D)类的非静态成员函数都有 this指针 20 有如下程序: #include iostream using namespace std; class

14、 MyClass public: MyClass()+count; MyClass()-count; static int getCount()return count; private: static int count; ; int MyClass: count=0; int main() MyClass obj; cout obj getCount(); MyClass*ptr=new MyClass; cout MyClass: getCount(); delete ptr; cout MyClass: getCount(); return 0; 程序的输出结果是 ( )。 ( A)

15、121 ( B) 232 ( C) 221 ( D) 122 21 若 AA为一个类, a为该类的非静态数据成员, t在该类的一个成员函数定义中访问 a时,其书写格式为 ( )。 ( A) a ( B) AA a ( C) a ( D) AA: a 22 有如下程序: #include iostream using namespace std; class XA int a; public: static int b; XA(int aa): a(aa)b+; int getA()return a; ; int XA: b=0; int main() XA d1(4), d2(5); cout

16、 d1 getA()+d2 getA()+XA: b+d1 b endl; return O; 运行这个程序的输出结果是 ( )。 ( A) 9 ( B) 11 ( C) 13 ( D) 15 23 有如下程序: #include iostream using namespace std; class VAC public; int f() constreturn 3; int f()return 5; ; Int main() VAC v1; const VAC v2; cout v1 f() v2 f(); feturn 0; 运行时的输出结果是 ( )。 ( A) 53 ( B) 35

17、( C) 55 ( D) 33 24 有如下程序: include iostream using namespace std; class A public: A(int i): r1(i) void print()cout E r1 -; void print()constcout C r1*r1 -; private: int r1; ; int main() A a1(2); const A a2(4); a1 print(); a2 print(); return 0; 运行时的输出结果是 ( )。 ( A)运行时出错 ( B) E2-C16- ( C) C4-C16- ( D) E2

18、-E4- 25 已知类 IMS中两个成员函数的声明为 “void listen() const; ”与 “void speak(); ”,另有两个对象的定义为 “IMS obj1; ”与 “const IMS obj2; ”,则下列语句中,产生编译错误的是 ( )。 ( A) obj1 listen(); ( B) obj1 speak(); ( C) obj2 listen(); ( D) obj2 speak(); 26 有如下类定义: class AA int a: Public: int getRef()constreturn &a; int getValue()constreturn

19、 a; void set(int n)consta=n; friend void show(AA aa)constcout a; ) ; 其中的四个函数定义中正确的是 ( )。 ( A) ( B) ( C) ( D) 27 有如下程序: using namespace std; class Boat; class Car public: Car(int i): weight(i) friend int Total(const Car c, const Boat&b); private: int weight; ; class Boat public: Boat(int i): weight(i

20、) friend int Total(const Car&c, const Boat &b); private: int weight; ; int Total(const Car &c, const Boat b) return c weight+b weight; int main() Car c(10); Boat b(8); cout “The total weight is“ Total(c, b) endl; return 0: 下列关于程序的描述中,正确的是 ( )。 ( A)程序编译正确 ( B)程序编译时语句 出错 ( C)程序编译时语句 出错 ( D)程序编译时语句 出错

21、国家二级 C+机试(类和对象)模拟试卷 3答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 此题考查的是类的定义。在定义类的成员变量时,如果 没有使用关键字;所有成员默认定义为 private私有权限。 【知识模块】 类和对象 2 【正确答案】 B 【试题解析】 此题考查了成员函数的定义格式。在类外部对成员函数定义时的一般格式为:返回类型类名:成员函数名 (参数表 )函数体 ,故此题正确答案为选项 B。 【知识模块】 类和对象 3 【正确答案】 D 【试题解析】 此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生

22、类从基类公有继承时,基类的公有成员和 保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。 【知识模块】 类和对象 4 【正确答案】 A 【试题解析】 由类 XCD的定义可知,成员函数 Geta()返回的是字符串的长度,Getb()返回的是参数 b的值。在主函数中 strlen(x Geta()的值等于 4, y Getb()的值等于 8,所以输出两者的和为 12。 【知 识模块】 类和对象 5 【正确答案】 B 【试题解析】

23、要在类外访问 x对象中 a的值,必须调用类的非静态公有成员函数getAO。 【知识模块】 类和对象 6 【正确答案】 B 【试题解析】 此题考查的是对象的构造。本题共声明了一个 MyClass对象 a,一个包含 2个 MyClass对象的数组 b和一个包含 2个 MyClass对象指针的数组 p,所以一共创建了 3个 MyClass类的对象,即调用了 3次构造函数。 【知识模块】 类和对象 7 【正确答案】 D 【试题解析】 在选项 D)中,定义了 MyClass类的一个对象 a和引用变量 p,并且声明 p初始化为对 a的引用。 【知识模块】 类和对象 8 【正确答案】 A 【试题解析】 由类

24、 MyClass的定义可知,数据成员 x属于私有成员,所以只能在类的内部访问。类 MyClass的对象 obj不能访问类 MyClass的私有成员 x。 【知识模块】 类和对象 9 【正确答案】 C 【试题解析】 此题考查的是类的构造函数。构造函数在对象创建的时候由系统自动调用。在 Point a(2), b3, *c4语句中: a(2)是定 义一个对象并传入构造函数2,所以此时会调用以此构造函数; b3是定义一个包含 3个对象的数组,所以构造函数会被调用 3次: *c4定义的是 4个 Point类对象指针的数组,它并没有创建任何 Point对象,所以不调用构造函数。 【知识模块】 类和对象

25、10 【正确答案】 D 【试题解析】 此题考查的是构造函数和析构函数。一个类可以有多个构造函数,但只能有一个析构函数。每一个对象在被创建时,都会隐含调用众多构造函数中的一个,而在销毁时又会隐含调用唯一的析构函数。此题中,主函数创建对象 A是会隐含调用 test(int a)这个构造函数,输出 3:接着主函数结束,对象 A销毁又隐含调用 test()析构函数输出 destructor。 【知识模块】 类和对象 11 【正确答案】 D 【试题解析】 此题考查的是类的构造。建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序 (自左向右 )-执行成员对象

26、的构造函数,调用顺序按照各个成员对象在类中声明的顺序 -执行自身的构造函数。本题中,首先会构造基类 Base,调用 Base类的构造函数,输出 0;然后还定义了一 个 Base类的对象,再次调用 Base类的默认构造函数输出 0:最后构造自身,因主函数中传入了构造参数 1,所以输出 1。故最后输出结果是: 001。 【知识模块】 类和对象 12 【正确答案】 B 【试题解析】 在 main函数中,定义了 Sampletemp2的一个包含两个对象的数组,还定义了一个 *pTemp2,是包含两个指向类对象的指针的数组,故定义的指针当 main函数结束后是不会调用析构函数的,只有包含两个对象的数组

27、temp2会调用析构函数,因此只输出两个 *。 【知识模块】 类和 对象 13 【正确答案】 C 【试题解析】 由类 TWO的定义可知,其成员为类 ONE的两个对象 one1和one2。所以在主函数中构建类 TWO的对象 t(4)时,先后调用类 ONE的构造函数ONE(): c(0)cout 1; 和 ONE(int n): c(n)cout 2; 输出 12,然后再调用类 TWO的构造函数 TWO(int m): one2(m)cout 3; ,输出 3。 【知识模块】 类和对象 14 【正确答案】 D 【试题解析】 类 Name有两个构造函数,在默认构造函数中, 给字符数组 name赋空值

28、,并输出一个 ?;在带有字符指针的构造函数中,把字符指针 fname所指的字符串赋给字符数组 name,并输出一个 ?。所以在主函数中,定义了 Name的三个对象, name0、 name1、 name2,在创建这三个对象时,会调用构造带参数的函数对前两个对象赋值,调用默认的构造函数把 name2的值赋为空值。这时会输出三个 “?”符号。 【知识模块】 类和对象 15 【正确答案】 B 【试题解析】 在这个程序的主函数中定义了 3个 CD类的实例对象 a, d0, d1和一 个指向 CD类对象的指针变量 b,所以当程序结束时,执行 CD的析构函数输出字符 C三次。 【知识模块】 类和对象 16

29、 【正确答案】 B 【试题解析】 构造函数具有下面 4个特殊韵性质:构造函数的名字必须与类名相同;构造函数不指定返回类型,它隐含有返回值,由系统内部使用;构造函数可以有一个或多个参数,因此构造函数可以重载;在创建对象时,系统会自动调用构造函数。 【知识模块】 类和对象 17 【正确答案】 D 【试题解析】 在类 Monkey中定义了默认的构造函数和带参数的构造函数,所以在主函数中,定义 Monkey的对象 p1时,调用默认的构造函数,输出 M;定义Monkey的对象 p2时,调用带参数的构造函数,输出 X;在执行 “delete p2; ”语句时,调用析构函数,输出 Y,在退出程序时,调用析构

30、函数输出 Y。 【知识模块】 类和对象 18 【正确答案】 D 【试题解析】 此题考查的是 this指针的使用。类的每一个成员函数都有 _个隐含的常量指针,即 this指针。类的静态成员函数不能含有 this指针,因为 this指针是一个指向本对象的指针。 【知识模块】 类和对象 19 【正确答案】 D 【试题解析】 this是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针可以知道自己属于哪一个对象。它隐藏于每个类的非静态成员函数中。 【知识模块】 类和对象 20 【正确答案】 A 【试题解析】 此题考查的是静态成员。静态成员的特性是不管这个类创建了多少对象,它的静态成员都只

31、有一个拷贝副本,这个副本被所有属于这个类的对象共享。题目中,首先定义了 obj对象,其构造函数使静态数据成员 count增 1,故输出 “1”;然后通过指针动态创建了 MyClass类的 对象,构造函数被再次调用,count变为 2,输出 “2”;接着删除创建的 MyClass类的对象,调用析构函数,count减 1变为 1,输出 “1”。故最终输出结果是 121。 【知识模块】 类和对象 21 【正确答案】 A 【试题解析】 类从的成员函数直接引用类从的非静态数据成员。 【知识模块】 类和对象 22 【正确答案】 C 【试题解析】 在类 XA的构造函数中,定义了用成员变量 a的值初始化变量髓

32、,同时静态成员变量 b值加 1。所以当在主 main函数中定义类 XA的对象 d1(4)后,变量 b的等于 1,定义对象 d2(5)后,变量 b的值等于 2,所以表达式d1 getA()+d 2 getA()+XA: b+d1 b等于 4+5+1+2+1=13。 【知识模块】 类和对象 23 【正确答案】 A 【试题解析】 此题考查的是常成员函数的应用。 VAC类中说明了两个函数,一个是常成员函数,一个是普通函数;在主函数中说明了两个对象,通过普通对象vl调用的是普通函数,输出 5;通过常对象 V2调用的是常成员函数,输出 3。 【知识模块】 类和对象 24 【正确答案】 B 【试题解析】 类

33、 A包括一个整型数据成员 r1,一个一般成员函数 print(),一个常成员函数 print() const。在主函数中定义了对象 a1,并对 r1的值赋 2和常对象a2,并对 r1的值赋 4,在 c+中,常对象不能被更新,所以常对象只能调用类的常成员函数,而不能调用一般成员函数。而一般的对象,既可以调用一般成员函数也可以调用常成员函数。所以在本题中,当执行 a1 print()时,输出为 E2-,执行 a2 print()时,输出为 C16-。 【知识模块】 类和对象 25 【正确答案】 D 【试题解析】 函数 listen()作为类 IMS的常成员函数,一般对象 obj1和常对象obi2都

34、可以调用它,而函数 speak()作为 IMS的一般成员函数,则只有一般对象obj1可以调用,而常对象 obj2调用会产生编译错误。 【知识模块】 类和对象 26 【正确答案】 B 【试题解析】 此题考查了常成员函数和友元函数的概念。选项 A中, getRef()函数的返回值和函数函数类型不符,故错误; C选项中 set()常成员函数改变了数据成员的值,这是不允许的: D选项中 show()函数被同时定义成友元函数和常成员函数是错误的 。 【知识模块】 类和对象 27 【正确答案】 A 【试题解析】 程序中定义了类 Car和类 Boat,在两个类中分别定义他们的构造函数和友元函数 friend。程序在 VC6 0中编译通过。 【知识模块】 类和对象

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

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

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