1、国家二级 C+机试(类和对象)模拟试卷 5及答案与解析 一、选择题 1 有如下类定义: class Test public: Test()a=0; C=0; int font 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) 2 下列关于类定义的说法中,正确的是 ( )。 ( A)类定义中包括数据成员和
2、函数成员的声明 ( B)类成员的缺省访问权限是保护的 ( C)数据成员必须被声明为私有的 ( D)成员函数只能在类体外进行定义 3 下列运算符函数中,肯定不属于类 Value的成员函数的是 ( )。 ( A) Value operator+(Value); ( B) Value operator-(Value, Value); ( C) Value operator*(int); ( D) Value operator (Value); 4 有如下程序: #include iostream using namespace std; class Point int x, y; public: P
3、oint(int x1=0, int y1=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 get()return center get()+radius; ; int main() Circle c(3, 4, 5); cout c get() endl; return 0; 运行时的输出结果是 ( )。 ( A) 5 ( B) 7 ( C) 9
4、( D) 12 5 下列关于类和对象的叙述中,错误的是 ( )。 ( A)一个类只能有一个对象 ( B)对象是类的具体实例 ( C)类是对某一类对象的抽象 ( D)类 和对象的关系是一种数据类型与变量的关系 6 若 MyClass是一个类名,且有如下语句序列 MyClass c1, *c2; MyClass *c3=new MyClass; MyClass &c4=c1; 上面的语句序列所定义的类对象的个数是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 7 有如下程序: #include iostream using namespace std; class Pair i
5、nt m, n; public: Pair(int j, int k): m(j), n(k) int get()return m; int get()constreturn m+n; ; int main() Pair a(3, 5); const Pair b(3, 5); cout a get() b get(); return 0; 运行时的输出结果是 ( )。 ( A) 33 ( B) 38 ( C) 83 ( D) 88 8 在下列函数原型中,可以作为类 AA构造函数的是 (。 ( A) void AA(int); ( B) int AA(); ( C) AA(int)const;
6、 ( D) AA(int); 9 有如下程序 #include iostream #include iomanip using namespace std; class MyClass public: MyClass()cout A MyClass(char c)cout c; MyClass()cout B; ; int main() MyClass p1, *p2; p2=new MyClass(X); delete p2; return 0; 执行这个程序屏幕上将显示输出 ( )。 ( A) ABX ( B) ABXB ( C) AXB ( D) AXBB 10 有如下程序: #incl
7、ude iostream 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=0): p2(x), p1(y), val(z)cout val; Whole()cout val; private: Part p1, p2; int val; ; int main() Whole obj(1, 2, 3); return 0; 程序的输出结果是
8、( )。 ( A) 123321 ( B) 213312 ( C) 213 ( D) 123123 11 在 C+中,编译系统自动为一个类生成缺省构造函数的条件是 ( )。 ( A)该类没有定义任何有参构造函数 ( B)该类没有定义任何无参构造 函数 ( C)该类没有定义任何构造函数 ( D)该类没有定义任何成员函数 12 有如下程序: #include iostream #include cstring using namespace std; class XCF int a: public: XCF(int aa=0): a(aa)cout “1“; XCF(XCF&x)a=x a; co
9、ut “2“; XCFOcout a; int Geta()return a; ; int main() XCF d1(5), d2(d1); XCF *pd=new XCF(8); cout pd- Geta(); delete pd; return 0; 运行时的输出结果是 ( )。 ( A) 1215588 ( B) 1218855 ( C) 12185 ( D) 128512 13 有如下程序: include iostream using namespace std; class Toy public: Toy(char*_n)strcpy(nnine, _n); count+; T
10、oy()count-; char* GetName()return name; static int getCountOreturn count; private: char name10; static int count; ; int Toy: Count=0; int main() Toy t1(“Snoopy“), ta(“Mickey“), t3(“Barbie“); eout t1 getCount() endl; return 0; 运行时的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D)运行时出错 14 若 MyClass为一个类,执行 “MyClass
11、 a4, *p5; ”语句时会自动调用该类构造函数的次数是 ( )。 ( A) 2 ( B) 5 ( C) 4 ( D) 9 15 下列关于析构函数的描述中,错误的是 ( )。 ( A)析构函数可以重载 ( B)析构函数由系统自动调用 ( C)每个对象的析构函数只被调用一次 ( D)每个类都有析构函数 16 有如下程序: #include iostream using namespace std; class MyClass public: MyClass ()cout *; MyClass (MyClass& a)cout ; MyClass ()cout ; ; int main(); M
12、yClass a; Myclass b(a); return 0; 运行时的输出结果是 ( )。 ( A) * ( B) * ( C) * ( D) * 17 有如下程序: #include iostream #include cstring using namespace std; class MyString public: char str80; MyString(const char* s)strcpy(str, s); MyString& operator+=(MyString a) strcat(str, a str); return *this; ; ostream& opera
13、tor (ostream& s,const MyString& z)return s z str; int main() MyString x(“abc“), y(“cde“); cout (x+=y) endl; return 0; 运行这个程序的输出结果是 ( )。 ( A) abc ( B) cde ( C) abcde ( D) abccde 18 下列程序段中包含 4个函数。其中具有隐含 this指针的是 ( )。 int fun1(); class Test public: int fun2(); friend int fun3(): static int fun4(); ( A)
14、 fun1 ( B) fun2 ( C) fun3 ( D) fun4 19 有如下程序: 撑 include iostream using namespace std; class Obj static int i; public: Obj()i+; Obj()i-; static int getVal()return i; ; int Obj: i=0; void f()Obj ob2; cout ob2 getVal(); int main() Obj obl; f(); Obj *ob3=new Obj; cout ob3- getVal(); delete ob3; cout Obj
15、: getVal(); return 0; 程序的输出结果是 ( )。 ( A) 232 ( B) 231 ( C) 222 ( D) 221 20 有如下类和对象的定义: class Constants public; static double getPI()return3 1416; ; Constants constants; 下列各组语句中,能输出 3 1416的是 ( )。 ( A) cout constants- getPI();和 cout Constants: gerPI(); ( B) cout constants getPI();和 cout Constants getP
16、I(); ( C) cout constants- getPI();和 cout Constants- getPI(); ( D) cout constants getPI();和 cout Constants: getPI(); 21 已知类 Myclass的定义如下 class MyClass public: void function1(MyClass& c)cout c data; static void function2(MyClass& c)cout c data; void function3()cout data; staric void function4()cout da
17、ta; private: int data; ; 其中有编译错误的函数是 ( )。 ( A) function1 ( B) function2 ( C) function3 ( D) function4 22 有如下程序 #include iostream using namespace std; int i=1; class Fun public: static int i; int value()return i-1; int value()constreturn i+1; ; int Fun: i=2; int main() int i=3: Fun fun1; const Fun fu
18、n2; return ; 若程序的输出结果是: 123 则程序中下划线处遗漏的语句是 ( )。 ( A) cout fun1 value() Fun: i fun2 value(); ( B) cout Fun: i fun1 value() fun2 value(); ( C) cout fun1 value() fun2 value() Fun: i; ( D) cout fun2 value() Fun: i fun1 value(); 23 有如下类定义和变量定义: class A public: A()data=0; A() int GetData() constreturn dat
19、a; void SetData(ira n)data=n; private: int data; ; const A a; A b; 下列函数调用中错误的是 ( )。 ( A) a GetData(); ( B) a SetData(10); ( C) b GetData(); ( D) b SetData(10); 24 某类中有一个无参且无返回值的常成员函数 Show,则正确的 Show函数原型是( )。 ( A) const void Show(); ( B) void const Show(); ( C) void Show()const; ( D) void Show(const);
20、 25 有如下类定义: Class Test char a; const charb; public: Test(char c)a=c; b=c; )第 1行 void f(char a)constthis- a=a; 第 2行 void g(char b)this- b=b; )第 3行 char h() constreturn a; 第 4行 ; 编译时没有错误的行是 ( )。 ( A)第 1行 ( B)第 2行 ( C)第 3行 ( D)第 4行 26 有如下程序: using std: cout; class Point friend double distance(const Poi
21、nt &p); p距原点的距离 Point(int xx=0, int yy=0): x(xx), y(yy) private: int x, y; ; double distance(const Point &p) return sqrt(p x*P x+p y*p y); int main() Point p1(3, 4); cout distance(p1); return 0; 下列叙述中正确的是 ( )。 ( A)程序编译正确 ( B)程序编译时语句 出错 ( C)桓序编译时语句 出错 ( D)程序编译时语句 出错 27 已知类 Myclass的定义如下: class MyClass
22、 public: MyClass(int d)data=d; MyClass() private: int data; ; 下列对 Myclass类对象数组的定义和初始化语句中,正确的是 ( )。 ( A) MyClass arrays2; ( B) MyClass arrays2=MyClass(5); ( C) MyClass arrays2=MyClass(5), MyClass(6); ( D) MyClass* arrays=new MyClass2; 国家二级 C+机试(类和对象)模拟试卷 5答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 此题考查的是类的定义。一个类的
23、长 数据成员的初始化只能在成员初始化列表中进行,故选项 A错误;常成员函数不能更新对象的数据成员,故选项 B错误;静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员,故选项 C错误。 【知识模块】 类和对象 2 【正确答案】 A 【试题解析】 此题考查的是类的定义。类中缺省的访问权限是私有的,所以选项B错误;类的数据成员和成员函数的访问控制权限均可被声明为公有、私有和保护中的一种,所以选项 C错误;成员函数的实现可以在类体内定义,也可以在类体外定义,所以选项 D错误。 【 知识模块】 类和对象 3 【正确答案】 B 【试题解析】 运算符作为非成员函数时,由于没有隐含
24、 this指针,因此所有的操作数必须出现在参数表中。对于第二个选项,出现了两个操作数,必然是非成员函数,但是对于其他三个选项,有可能都是要求两个操作数的成员函数。 【知识模块】 类和对象 4 【正确答案】 D 【试题解析】 根据类 Point和类 Circle的定义可知,类 Circle的实例 c(3, 4, 5)的成员函数 c get()返回值为 3+4+5=12。 【知识模块】 类和对象 5 【正确答案】 A 【试题解析】 此题考查的是类和对象的概念。类是用户定义的一种数据类型,可以使用这个类型来说明一个或多个变量,即对象。 【知识模块】 类和对象 6 【正确答案】 C 【试题解析】 C1
25、、 *C2、 C3是 3个 MyClass对象, C4是 MyClass对象的引用,它是对象 Cl的别名。 【知识模块】 类和对象 7 【正确答案】 B 【试题解析】 在主函数中定义了类 Pair的一个实例变量 a,并分别对实例变量 a的数据成员 m, n赋初值 3, 5。所以调用 a get()成员函 数时,输出 3。又定义类Pair的一个常实例变量 b,并分别对实例变量 b的数据成员 m, n赋初值 3, 5。所以调用成员函数 b get()时,输出 8。 【知识模块】 类和对象 8 【正确答案】 D 【试题解析】 此题考查的是构造函数的概念。构造函数是类的一个特殊成员函数,它与类同名,并
26、且没有返回值。选项 A、 B不符合要求。选项 C中函数 AA,会更新对象的数据成员。 【知识模块】 类和对象 9 【正确答案】 D 【试题解析】 此题考查的是构造函数和析构函数。构造函数在对象被创建的时候由系统自 动调用,而析构函数在对象的生存期即将结束的时候由系统自动调用。此题中,主程序在创建 MayClass类的对象 pl时,调用 MayClass类的默认构造函数,输出字母 A:然后在创建 *p2对象时,调用带字母参数的构造函数,输出字母X:语句 delete p2:调用析构函数,输出字母 B;在主函数退出时,调用析构函数清除对象 p1,输出字母 B。 【知识模块】 类和对象 10 【正确
27、答案】 B 【试题解析】 此题考查的是类的构造与析构。建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各 个基类被继承时声明的顺序 (自左向右 )接着执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序,最后执行自身的构造函数。析构顺序与之相反。本题中, Whole类中有两个 Part类的成员 p1和 p2,根据它们定义的顺序,先构造 p1再构造 p2。所以,首先被构造的是 p1(y),输出 2;第二个被构造的是 p2(x),输出 1; 最后调用析构函数,输出 va1的值 3:析构函数调用顺序与构造函数相反。故最后输出213312。 【知识模块】 类和对象
28、11 【正确答案】 C 【试题解析】 如果一个类中定义 了一个缺省的构造函数,则使用该函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的共有缺省构造函数。 【知识模块】 类和对象 12 【正确答案】 B 【试题解析】 在这个程序中在建立对象 d1(5)时,调用构造函数 XCF(int aa=0):a(aa)cout “1“; ,输出 1;在建立 d2(d1)时,调用拷贝构造函数 XCF(XCF& x)a=x a; cout “2“; ),输出 2;在建立 new XCF(8)对象时,调用构造函数XCF(int aa=0): a(aa)cout “1“; ,输出 1;语句 cou
29、t pd- Geta()的功能是输出 8;语句 delete pd;调用析构函数 XCF(),输出 8;当退出程序时,分别释放对象 d2、 d1,输出 55。 【知识模块】 类和对象 13 【正确答案】 C 【试题解析】 类 Toy中包含一个字符数组 name和一个静态整型变量 count。在程序中首先给类 Toy的成员 count的赋初始值 0,然后在主函数中,定义了三个Toy对象 t1、 t2、 t3,并分别对它们的 name字段赋值,在赋值的同时变量 count的值加 1,所以最后变 量 count的值等于 3。 【知识模块】 类和对象 14 【正确答案】 C 【试题解析】 语句 MyC
30、lass a4, *p5不仅定义了 4个 MyClass对象,分别为a0, a1, a2, a3,而且定义了 5个指向 MyClass对象的指针变量,分别为*p0, *p1, *p2, *p3, *p4,所以共调用 MyClass的构造函数 4次。 【知识模块】 类和对象 15 【正确答案】 A 【试题解析】 一般情况下,析构函数在对象的生存周期即将结束的时候由系 统自动调用。在调用完成之后,对象也就消失了,相应的内存空间也被释放。析构函数没有参数,因此析构函数不能重载,一个类中只能定义一个析构函数。 【知识模块】 类和对象 16 【正确答案】 C 【试题解析】 程序在执行时,先创建类对象 a
31、,输出 *,再创建类对象 b,输出撑,然后再依次调用类对象 b和 a的析构函数,输出两个 【知识模块】 类和对象 17 【正确答案】 D 【试题解析】 在类 MyString中,定义了带参数的构造函数 MyString(eonst chin* s),其作用是把 s指向的字符串拷贝到字符组 str中。在类中还对运算 +=进行重载定义,其作用是把字符串 str和 a相连接并赋给 str,所以在主函数中执行 x+=y时,结果为 abccde。 【知识模块】 类和对象 18 【正确答案】 B 【试题解析】 this指针是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针知道自己属于哪一个
32、对象。 this指针是一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确的地表示出了成员函数当前操作的数据所属的对象。 【知识模块】 类和对象 19 【正确答案 】 D 【试题解析】 此题考查的是静态成员。本题中, Obj类定义了一个静态数据成员i,并初始化为 0在主函数中,首先定义了 1个该类对象 ob1,所以构造函数被调用 1次, i加 1;然后调用函数 (f),该函数中又定义了一个对象 ob2,此时 i再次加1变为 2,然后通过函数 getVal()输出 i的值 2。 f()函数结束, ob2变量被释放,故析构函数被调用了 1次, i变成 1;回到主函数中,又动态创建了 1个对象并
33、让ob3指向它,此后 i变成 2并输出。最后释放动态创建的对象 i变为 1,输出 1。故最终的输出结果是 221。 【 知识模块】 类和对象 20 【正确答案】 D 【试题解析】 此题考查的是静态成员函数的引用。 getPI()是类 Constants的静态成员函数。引用静态成员函数可以有两种形式:一是通过类名直接进行调用,例如类名:静态成员函数名;另一种是用类的任何对象名进行调用其作用仅是通过对象名间接的指出类名,例如 constants getPI()选项 D即是这种调用方式。 【知识模块】 类和对象 21 【正确答案】 D 【试题解析】 funcyion4()函数作为类的静态成员函数,不
34、能直接访问类 中说明的非静态成员,即 cout data在编译时会出错。 【知识模块】 类和对象 22 【正确答案】 A 【试题解析】 此题考查的是常成员函数。 const关键字可以用于参与重载函数的区分,此时常对象调用常成员函数,一般对象调用一般成员函数。当类中只有一个常成员函数时,一般对象也可以调用该常成员函数。本题中,通过 funl调用value()函数时,是调用前一个,而通过 fun2调用 value()函数是调用后一个:另外, value()函数中,访问的 i是类中定义的数据成员 i,全局变量 i在类中被 “屏蔽 ”。 fun1 value()输出 i-1=2-1=1; fun2 v
35、alue()调用后一个 value()函数输出i+1=2+1=3; Fun: i是通过类名直接访问类的静态数据成员 i的值,即 2;所以正确的输出顺序是 A选项。 【知识模块】 类和对象 23 【正确答案】 B 【试题解析】 由题意可知 a为常对象,因为常对象不能被更新,所以通过这个常对象只能调用它的常成员函数 GetData(),而不能调用其他成员函数 SetData(10),因而选项 B为本题的正确答案。 【知识模块】 类和对象 24 【正确答案】 C 【试题解析】 常成员函数的说明格式如下:返回类型成员函数名 (参数表 )const;,所以对于本题来说无参且无返回值的常成员函数 show
36、,其正确的函数原型是选项 C)。 【知识模块】 类和对象 25 【正确答案】 D 【试题解析】 类 Test中的常成员函数 h()返回数据成员 a的值。 【知识模块】 类和对象 26 【正确答案】 A 【试题解析】 这段程序是正确的,计算 p距离原点的距离。语句 是类 Point的构造函数,在构造函数中给变量 xx和 yy赋初值 0。语句 是计算点 p距原点的距离的函数 distance。语句 是计算点 p1距离原点的距离并输出。 【知识模块】 类和对象 27 【正确答案】 C 【试题解析】 在选项 C)中定义了类 MyClass对象数组 arrays2,并用对象MyClass(5)和 MyClass(6)对这个数组中的两个元素赋初值。 【知识模块】 类和对象