1、2008 年 9月国家二级( C+)笔试真题试卷及答案与解析 1 一个栈的初始状态为空。现将元素 1、 2、 3、 4、 5、 A、 B、 C、 D、 E依次入栈,然后再依次出栈,则元素出栈的顺序是 ( )。 ( A) 123456ABCDE ( B) EDCBA54321 ( C) ABCDEl2345 ( D) 54321EDCBA 2 下列叙述中正确的是 ( )。 ( A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构 ( B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况 ( C)在循环队列中,只需要 队尾指针就能反映队列中元素的动态变化情况 ( D)循环队列中
2、元素的个数是由队头指针和队尾指针共同决定 3 在长度为 n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。 ( A) O(n) ( B) O(n2) ( C) O(log2n) ( D) O(nlog2n) 4 下列叙述中正确的是 ( )。 ( A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 ( B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构 ( C)顺序存储结构能存储有序表,链式存储结构不能存 储有序表 ( D)链式存储结构比顺序存储结构节省存储空间 5 数据流图中带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)事件驱动 ( C
3、)模块调用 ( D)数据流 6 在软件开发中,需求分析阶段可以使用的工具是 ( )。 ( A) N-S图 ( B) DFD图 ( C) PAD图 ( D)程序流程图 7 在面向对象方法中,不属于 “对象 ”基本特点的是 ( )。 ( A)一致性 ( B)分类性 ( C)多态性 ( D)标识唯一性 8 一间宿舍可住多个学生,则实体宿舍和学生之间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 9 在数据管理技术发展的 3个阶段中,数据共享最好的是 ( )。 ( A)人工管理阶段 ( B)文件系统阶段 ( C)数据库系统阶段 ( D)三个阶段相同 10 有 3个关
4、系 R、 S和 T如下:由关系 R和 S通过运算得到关系 T,则所使用的运算为 ( )。 ( A)笛卡尔积 ( B)交 ( C)并 ( D)自然连接 11 在下列原型所示的 C+函数中,按 “传值 ”方式传递参数的是 ( )。 ( A) void f1(int x); ( B) void f2(int*x); ( C) void f3(const int*x); ( D) void f4(int”,但无法通过编译。这说明 ( )。 ( A) f()是基类的私有成员 ( B) f()是基类 的保护成员 ( C)派生类的继承方式为私有 ( D)派生类的继承方式为保护 14 下列关于运算符重载的叙述
5、中,错误的是 ( )。 ( A)有的运算符可以作为非成员函数重载 ( B)所有的运算符都可以通过重载而被赋予新的含义 ( C)不得为重载的运算符函数的参数设置默认值 ( D)有的运算符只能作为成员函数重载 15 下列关于模板的叙述中,错误的是 ( )。 ( A)调用模板函数时,在一定条件下可以省略模板实参 ( B)可以用 int、 double这样的类型修饰符来声明模板参数 ( C)模板声明中的关键 字 class都可以用关键字 typename替代 ( D)模板的形参表中可以有多个参数 16 要利用 C+流进行文件操作,必须在程序中包含的头文件是 ( )。 ( A) iostream ( B
6、) fstream ( C) strstream ( D) iomanip 17 下列字符串中不能作为 C+标识符使用的是 ( )。 ( A) WHILE ( B) user ( C) _lvar ( D) 9stars 18 下列语句中错误的是 ( )。 ( A) const int a; ( B) const int a=10; ( C) const int*point=0; ( D) const int*point=new int(10); 19 有如下程序: #include iostream using namespace std; int main() int sum; for(i
7、nt i=0; i6; i+=3) sum=i; for(int j=i; j 6; j+)sum+=j; cout sum end1; return 0; 运行时的输出结果是 ( )。 ( A) 3 ( B) 10 ( C) 12 ( D) 15 20 下列语句中,正确的是 ( )。 ( A) char*myString=“Hello-World!“; ( B) char myString=“Hello-World!“; ( C) char myString11=“Hello-World!“; ( D) char myString12=“Hello-World!“; 21 若已经声明了函数原
8、型 “void fun(int a, double b=0.0);”,则下列重载函数声明中正确的是 ( )。 ( A) void fun(int a=90, double b=0.0); ( B) int fun(int a, double ); ( C) void fun(double a, int ); ( D) bool fun(int a, double b=0.0); 22 有如下程序: #include iostream using namespace std; class Sample public: Sample() ) Sample()cout *; ; int main()
9、 Sample temp2, *pTemp2; return 0; 执行这个程序输出星号 (*)的个数为 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 23 下列选项中,与实现运行时多态性无关的是 ( )。 ( A)重载函数 ( B)虚函数 ( C)指 针 ( D)引用 24 下列运算符函数中,肯定不属于类 Value的成员函数的是 ( )。 ( A) Value operator+(Value); ( B) Value operator-(Value, Value); ( C) Value operator*(int); ( D) Value operator/(Valu
10、e); 25 下列模板声明中,有语法错误的是 ( )。 ( A) template typename T T fun(T x)return x; ( B) template typename T T fun(T x, int n)return x*n; ( C) template class T T fun(T*p)return *p; ( D) template class T T ClassAT n; 26 在语句 “cout A;”中, cout是 ( )。 ( A)类名 ( B)对象名 ( C)函数名 ( D) C+的关键字 27 有如下程序: #nclude iostream usi
11、ng namespace Std; Class MyClass public: MyClass(int i=0)cout1; MyClass(constMyClass MyClass()cout 4; ; int main() MyClass obj1(1), obj2(2), obj3(obj1); return 0: 运行时的输出结果是 ( )。 ( A) 112444 ( B) 11114444 ( C) 121444 ( D) 11314444 28 有如下程序: #nclude iostream using namespace std; class MyClass public: M
12、yClass(int x):val(x) void Set(int x)Val=x; void Print()constcout “val=“ Val t; private: intval; ; int main() const MyClass obj1(10); MyClass obj2(20); obj1.Print(); /语句 1 obj2.Print(); /语句 2 obj1.Set(20); /语句 3 obi2.Set(30); /语句 4 return 0; 其主函数中错误的语句是 ( )。 ( A)语句 1 ( B)语句 2 ( C)语句 3 ( D)语句 4 29 在类声
13、明中,紧跟在 “public:”后声明的成员的访问权限是 ( )。 ( A)私有 ( B)公有 ( C)保护 ( D)默认 30 对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是 ( )。 ( A)公有或私有 ( B)私有 ( C)保护或私有 ( D)公有或保护 31 定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默 认方式为( )。 ( A)私有继承 ( B)非私有继承 ( C)保护继承 ( D)公有继承 32 建立一个有成员对象的派生类对象时,各构造函数体的执行次序为 ( )。 ( A)派生类、成员对象类、基类 ( B)成员对象类
14、、基类、派生类 ( C)基类、成员对象类、派生类 ( D)基类、派生类、成员对象类 33 如果表达式 a =b 中的 “ =”是作为非成员函数重载的运算符,则可以等效地表示为 ( )。 ( A) a.operator =(b) ( B) b.operatotr =(a) ( C) operator =(a,b) ( D) operator =(b,a) 34 当使用 ofstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为 ( )。 ( A) ios base:in ( B) ios_base:binary ( C) ios base:in|ios base:out ( D
15、) ios base:out 35 在一个抽象类中,一定包含有 ( )。 ( A)虚函数 ( B)纯虚函数 ( C)模板函数 ( D)重载函数 36 对下列二叉树进行中序遍历的结果 _。 37 按照软件测试的一般步骤,集成测试应在 _测试之后进行。 38 软件工程 3要素包括方法、工具和过程,其中, _支持软件开发的各个环节的控制和管理。 39 数据库设计包括概念设计、 _和物理设计。 40 在二维表中,元组的 _不能再分成更小的数据项。 41 当使用关键字 _作为函数返回类型时,该函数不返回任何值。 42 已知数组 a中有 n个元素,下列语句将数组 a中从下标 x1开始的 k个元素移动到从下
16、标 x2开始的 k个元素中,其中 O =xl x2 n, x2+k n,请将下列语句补充完整。 For(int i=x1+k-1; i =x1; i-) a_=ai; 43 有如下程序: #include iostream using namespace std; int fun1(int x) return+x; int fun2(int int main() int x=1, y=2; y=fun 1(fun2(x); cout X , y; return 0: 程序的输出结果是 _。 44 有如下程序: #include iostream using namespace std; cla
17、ss pumpkin public: pumpkin()+count; pumpkin()-count; static void total_count() cout count “pumpkin(s)“ end1; private: static int count; ; int pumpkin:count=0; int main() pumpkin p110; pumpkin:total_count(); return 0; 这个程序的输出结果是 _。 45 有如下递归函数: int Fun(int n) if(n =1) return 1; _ 请补充完整,使得函数 Fun能够正确计算形
18、参 n的阶乘。 46 请在下列程序中的横线处填写正确的语句: class Sample public: Sample()() Sample() void SetData(int data)/将 Sample类成员变量 data设置成形参的值 _ private: int data; ; 47 有如下类定义,请将 Sample类的拷贝构造函数补充完整。 class Sample public: Sample() Sample()if(p)delete p;) Sample(const Sample private: int*p; ; 48 重载加法运算符 “+”,其函数名是 _。 49 有如下程
19、序: #include iostream using namespace std; class Wages /“工资 ”类 double base; /基本工资 double bonus; /奖金 double tax; /税金 public: Wages(double CBase, double CBonus, double CTax): base(CBase), bonus(CBonus), tax(CTax) double getPay()const; /返回应付工资额 Wages operator+(Wages w)const; /重载加法 ; double Wages:getPay(
20、)constreturn base+bonus-tax; Wages Wages:operator+(Wages W)const return Wages(base+w.base, bonus+w.bonus, tax+w.tax); int main() Wages w1(2000,500,100),w2(5000,1000,300); cout (w1+w2).getPay0 end1; return 0; 程序的输出结果是 50 有如下程序: #include iostream using namespace std; class Pet char name10; public: Pet
21、(char*name)strcpy(this- name, name); const char*getName()const return name; virtual void call()const=0; ; class Dog:public Pet public: Dog(char*name):Pet(name) void call()constcout “汪汪叫 “: ; class Cat:public Pet public: Cat(char*name):Pet(name) void call()constcout “喵喵叫 “; ; int main() Pet*pet1=new
22、Dog(“哈克 “), *pet2=new Cat(“吉米 “); cout pet1- getName(); pet1- call(); cout end1; cout pet2- getName(); pet2- call(); cout end1; return 0; 程序的 输出结果是 _。 2008 年 9月国家二级( C+)笔试真题试卷答案与解析 1 【正确答案】 B 【试题解析】 栈是按照 “先进后出 ”或 “后进先出 ”的原则组织数据的。所以出栈顺序是 EDCBA54321。 2 【正确答案】 D 【试题解析】 循环队列中元素的个数是由队头指针和队尾指针共同决定的,元素的动态变
23、化也是通过队头指针和队尾指针来反映的。 3 【正确答案】 C 【试题解析】 对于长度为 n的有序线性表,在最坏情况下,二分法查找只需比较log2n次,而顺序查找需要比较 n次。 4 【正确答案】 A 【试题解析】 顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元中,结点之间的关系由存储单元的邻接关系来体现。而链式存储结构的存储空间不一定是连续的。 5 【正确答案】 D 【试题解析】 数据流图是从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。其中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。 6 【正确答案】 B
24、【试题解析】 在软件开发中,需求分析阶段常使用的工具有数据流 图 (DFD),数据字典 (DD)、判断树和判断表。 7 【正确答案】 A 【试题解析】 对象具有如下特征:标识惟一性、分类性、多态性、封装性、模块独立性。 8 【正确答案】 B 【试题解析】 两个实体集间的联系可以有以下几种:一对一的联系、一对多或多对一联系、多对多。由于一个宿舍可以住多个学生,所以它们的联系是一对多联系。 9 【正确答案】 C 【试题解析】 数据管理技术的发展经历了 3个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。人工管理阶段无共享,冗余度大:文件管理阶段共 享性差,冗余度大;数据库系统管理阶段共享性大,冗
25、余度小。 10 【正确答案】 D 【试题解析】 在实际应用中,最常用的连接是一个叫自然连接的特例。它满足下面的条件:两关系间有公共域;通过公共域的相等值进行连接。通过观察 3个关系 R, S, T 的结果可知,关系 T是由关系 R和 S 进行自然连接得到的。 11 【正确答案】 A 【试题解析】 此题考查的是函数参数的传递方式。函数参数的传递方式分为传值和传地址两种。选项 B)和选项 C)中函数的参数是指针,而指针作为函数参数传递的是地址:选项 D)中函数的参数 为引用,引用传递好比是给变量起了一个别名,表明传给函数的参数值就是它本身的地址,操作会影响到这个变量的值;只有选项 A)中的函数参数
26、为传值方式。 12 【正确答案】 C 【试题解析】 在类定义时没有定义任何构造函数时,则编译器自动生成一个不带参数的缺省构造函数,其格式如下: 类名 :缺省构造函数名 () 按构造函数的规定,缺省构造函数名同类名。缺省构造函数的这种格式也可由程序员定义在类体中。在程序中定义一个对象而没有指明初始化时,则编译器便按缺省构造函数来初始化该对象。用缺省构造函 数对对象初始化时,则将对象的所有数据成员都初始化为零或空。 13 【正确答案】 A 【试题解析】 此题考查的是派生类对基类成员的访问。基类的成员有公有保护和私有 3种访问属性:类的继承方式也有公有继承、保护继承和私有继承 3种。无论哪种继承方式
27、,派生类中的成员都不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员。 14 【正确答案】 B 【试题解析】 此题考查的是运算符的重载。 C+中运算符重载是多态性的一种表现,在 C+语言中, “.”、 “.*”、 “- ”、 “:”、 “?:”这 5个运算符不能重载,所以选项 B)错误。由于很多符号是一元运算符和二元运算符公用的,为了避免含混,不得为重载的运算符函数设置默认值,调用时也就不得省略实参。其中 “=”、“”、 “- ”及所有的类型转换运算符只能作为成员函数重载:如果允许第一操作数不是同类对象,而是其他数据类型,则只能作为非成员函数重载。 15 【正确答案】 C 【试题解
28、析】 此题考查的是模板的概念。模板的一般说明形式如下: template类型形参表函数返回值类型函数名 (形参表 )函数体 。其中的模板形参表声明是由一个或多个模板形 参组成 (如果是多个,需要用逗号隔开 )。参数在用类模板定义对象时,由于没有像函数实参表这样的额外信息渠道,因此无法按函数模板的方式省略模板形参,但是可以为类模板的参数设置默认值。关键字 class除了能用来定义类以外,还能用来声明模板的虚拟类型参数,在用作声明虚拟类型参数时,typename与 class 可以互换,但不能使用 typename来定义类;在模板形参表中除了可以用 typename和 class 声明虚拟类型参数
29、外,还可以使用普通类型声明常规函数。 16 【正确答案】 B 【试题解析】 iostream通用 I/O 流类和其他 I/O 流的基类; fstream类用来对文件流进行操作, fstream类的头文件是 fstream.h: stxstream类同时可以支持 C风格的串流的输入输出操作 iomanip 是 I/O 流控制头文件,就像 c中的格式化输出一样。 17 【正确答案】 D 【试题解析】 此题考查的是 C+语言中标识符的定义。标识符由字母、数字或下划线构成,但第一个字符必须是字母或下划线;标识符中大小写字母是不同的;用户定义标识符时,不允许采用系统的关键宇。 18 【正确答案】 A 【
30、试题解析 】 此题考查的是符号常量的概念。符号常量必须在声明的同时赋初值,故选项 A)错误。 19 【正确答案】 D 【试题解析】 此题考查的是 for循环。首先进入外循环,根据循环条件, i的初始化值为 0,赋值给 sum,进入内循环 i的初值也被赋值为 i的初始值 0,所以第一次内循环 sum值为 0,判断 j=0,小于 6,进行第二次内循环, sum的值为1,同理,仍然进行内循环直到 j=6,跳出内循环, sum=15:外循环中 i=3, i 6,满足循环条件进入第二次外循环, i=3, sum=3,进入内循环, j=3,同理,计算内循 环中 sum的值,直到 j=6跳出内循环,此时 s
31、um=15;外循环中 i=6,跳出外循环,执行输出语句,即 sum=15。 20 【正确答案】 A 【试题解析】 选项 A)中 char*myString=“Hello-World!“字符串的长度是 12个字符加上一个尾符,所以是 13,因此选项 C)和选项 D)申请的空间都不够,报数组溢出异常。而选项 B)定义的变量 myString 为字符变量,不是用来存放字符串的,所以错误。 21 【正确答案】 C 【试题解析】 此题考查的是函数重载。在 C+语言中,允许定义 一系列函数名相同,但形参的个数和类型不完全相同的函数,即函数的重载。重载函数对返回值类型不做要求,返回值类型也不参与区分函数的重
32、载形式。选项 A)中参数表相同,返回类型也相同,所以错误。选项 B),选项 D)中相同参数表,不同返回类型所以错误。 22 【正确答案】 B 【试题解析】 此题考查的是构造函数和析构函数。构造函数在对象被创建时由系统自动调用,而析构函数在对象的生存期即将结束时由系统自动调用。此题中,主程序在创建 Sample 类的对象 temp2数组时,调用 Sample类的默认构造函数,在主函数 退出时,调用析构函数清除对象 temp2,输出字母 *,因为对象是包含两个元素的数组,所以调用两次析构函数,即输出两个 *。 23 【正确答案】 A 【试题解析】 此题考查的是多态性。 C材语言的多态性有两种:函数
33、重载和虚函数。虚函数只有在运行时才能被确定,称为运行时多态。利用虚函数,可在基类和派生类中使用相同的函数名定义函数的不同实现,从而实现 “一个接口,多种方式 ”。当用基类指针或引用对虚函数进行访问时,软件系统将根据运行时指针或引用所指向或引用的实际对象来确定调用对象所在类的虚函数版本。编译时的多 态是通过函数重载和模板实现的。 24 【正确答案】 B 【试题解析】 此题考查的是运算符 “-”的重载。 “-”运算符有一元和二元两种,且均可以重载为成员函数和非成员函数。运算符重载为成员函数时,形参个数一般为运算符元素减 1;重载为非成员函数时,形参个数一般和运算符元素相等。所以“-”运算符重载为成
34、员函数时,参数可以是。个或 1个;而重载为非成员函数时,参数个数可以是 1个或 2个。所以选项 B),肯定是重载为非成员函数。 25 【正确答案】 D 【试题解析】 此题考查的是函数模板的声明。声明一个函 数模板的格式为:template模板形参表声明函数声明,其中的模板形参表声明是由一个或多个 “模板形参 ”组成的,每个 “模板形参 ”可具有以下几种形式: typename参数名;class 参数名;类型修饰参数名。而选项 D)为定义类模板的格式,即 template类型形参表, class类模板名 ;。 26 【正确答案】 B 【试题解析】 cout是在 iostrem文件中定义的全局对象
35、, #include iostream能生成此对象,便可直接使用。 27 【正确答案】 A 【试题解 析】 此题考查的是函数重载。从主函数入手,定义了 MyClass类的对象 obj1(1), obj2(2)和 obj3(obj1)。其中对象 obj1和 obj2中的参数为整型,因此调用构造函数 MyClass(int i=O)cout 1小输出 11;对象 obj3中的参数为对象obj1,所以调用构造函数 MyClass(const MyClass,输出 2。在主函数退出时,调用析构函数 MyClassOcout 4;,清除对象。 obj1, obj2和obj3,因此输出 444,即答案为选
36、项 A)。 28 【正确答案】 C 【试题解析】 此题考查的是常对象。使用 const关键字修饰的对象称为常对象,它不能被更新。主函数中声明的 obj1是常对象,因此 obj1不能被更新,即语句 3更新。均 1的语句错误。 29 【正确答案】 B 【试题解析】 此题考查的是类的访问权限。在 C+语言中,类的访问权限有公有(public)、保护 (protect)和私有 (private)3种。 30 【正确答案】 D 【试题解析】 此题考查的是派生类对基类成员的访问。基类的成员有公有、保护和私有 3种 访问属性;类的继承方式也有公有继承、保护继承和私有继承 3种。无论哪种继承方式,派生类中的成
37、员都不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员。 31 【正确答案】 A 【试题解析】 此题考查的是派生类的基本知识。在声明派生类时,如果不显式地给出继承万式,缺省的类继承方式是私有继承 private。 32 【正确答案】 C 【试题解析】 此题考查的是继承中的构造函数。构造函数不能够被继承。派生类构造函数的调用顺序如下: 调用基类的构造函数,调用顺序按照它们继承时说明的顺序; 调用子对象类的构造函数,调用顺序按照它们在类中说明的顺序; 派生类构造函数体中的内容。 33 【正确答案】 C 【试题解析】 此题考查的是运算符的重载。运算符函数有两种调用形式:第一种是直接用函数
38、名进行调用:另一种是通过运算符构成表达式的形式进行调用。 34 【正确答案】 D 【试题解析】 此题考查的是文件输入输出流的基本知识。对于 ofstream流,mode的默认值为 ios:out。另外,对于 ifstream流, mode参数的默认值为ios:in。 35 【正确答案】 B 【试题解析】 此题考查的是抽象类的定义。带有纯虚函数的类称为抽象类,所以抽象类一定含有纯虚函数。 36 【正确答案】 输出 【试题解析】 测试用例由测试输入数据 (输入值集 )和与之对应的预期输出结果 (输出值集 )两部分组成。 37 【正确答案】 16 【试题解析】 在二叉树中,深度为 N的满二叉树的叶子
39、结点的数目为: 2N-1。 38 【正确答案】 24 【试题解析】 在循环队列中因为头指针指向的是队头元素的前一个位置,所以是从第 6个位置开始有数据元素,所以队列中的数据元素的个数为 29-5=24。 39 【正确答案】 关系 【试题解析】 在关系数据库中,用关系也就是二维表来表示实体之间的联系。 40 【正确答案】 数据定义语言 【试题解析】 在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,数据定义语言负责数据的模式定义与数据的物理存取构建,数据操纵语言负责数据的操纵,包括查询及增、删、改等操作,数据控制语言负责数据完整性、安全性的定义与检查以及并发控制、恢复等功能。 4
40、1 【正确答案】 void 【试题解析】 此题考查的是函数的定义。关键字 void声明的函数的返回类型为不返回任何值。 42 【正确答案】 X2+k-1 【试题解析】 此题考查的是数组的操作。 ai表示从下标 x1开始的第 i个元素,若为第一次循环,则 i为 xt+k-1,按照题目将数组 a中从下标 x1开始的 k个元素移动到从下标 x2开始的 k 个元素中的要求,所以将 ai赋值给下标为 X2+k-1的元素。 43 【正确答案】 2,3 【试题解析】 此题考查的是函数传值。 int fun1(int x) retum+x;函数中参数为传值,所以对于函数的操作不会改变实参的 值,而函数 int
41、 fun2(int 中的参数为引用,对于形参的操作会改变实参的值。在主函数中调用 fun2(x)后,变量 x的值修改为 2,所以在调用 fun1函数时其形参值为 2,即运算后 y的值被赋值为 3,所以输出为 2,3。 44 【正确答案】 10pumpkin(s) 【试题解析】 此题考查的是静态数据成员。题目中 count数据成员要定义成静态的,静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。本题中, pumpkin 类定义了一个静态数据成员 count,并初始化为 0。在主函数中,首先定义了该类对象 p110,所以构造函数被调用 10次, count累加 1十次;然后调用函数 to
42、tal count(),通过函数该输出 count的值 10。 total count()函数结束,对象被释放,故析构函数被调用了 10次, count变成 0。 45 【正确答案】 else return n*Fun(n-1); 【试题解析】 此题考查的是递归函数。函数 Fun 中的参数 n小于 2时, Fun 函数返回 1,其余返回值为 n*Fun(n-1)。 46 【正确答案】 Sample:data; 【试题解析】 此题考查的是 this 指针。由于 Sample类的数据成员和函数的形参名称都是 data,如果在函数中直接使用 data引用的是形参变量而不是 Sample类的数据成员。
43、解决办法两种有:一是通过 this指针,在类的成员函数中 this 代表函数所属对象的指针,即可填 this- data:二是通过作用域运算符 “:”明确指出访问的是 Sample类的成员,所以在横线处填入 Sample:data。 47 【正确答案】 p=new int; p=s.p; 【试题解析】 此题考查的是复制构造函数。复 制构造函数定义的一般格式如下:类名 :类名 (const类名 &引用对象名 )复制构造函数体 )。而在类中的声明部分可省去 “类名 :”。 48 【正确答案】 operator+ 【试题解析】 此题考查运算符重载的概念。 C+语言把重载的运算符视作特殊的函数,称为运
44、算符函数,赋予已有的运算符多重含义。运算符函数名由运算符前加关键字 operator构成。 49 【正确答案】 8100 【试题解析】 此题考查运算符重载。首先从主函数入手,定义了类 Wages的对象 w1和 w2,然后调用重载运算符 +,计 算对象 w1和 w2中 CBase、 CBonus以及CTax的和,分别是 7000、 1500、 400,然后调用 getPay()成员函数,计算base+bonus-tax, 7000+1500-400=8100。 50 【正确答案】 哈克汪汪叫 吉米喵喵叫 【试题解析】 此题考查的是虚函数与多态性。在成员函数的声明前面加上 virual关键字,即可
45、把函数声明为虚函数;在 C+中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。即若基类和 派生类中存在一模一样的成员函数,通过该基类指针调用这样的成员函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。本题中,在 f()函数中,此题中, void call()在基类中被声明为虚函数,在主函数中,语句 Pet*pet1=new Dog(“哈克“), *pet2=new Cat(“吉米 “);定义了基类的指针 per1和 pet2,并让它们分别指向派生类对象 Dog和 Cat。所以通过该指针调用 call()时运行的是派生类的版本,分别输出哈克和吉米;而通过该指针调用 getName()运行 的是基类的版本,分别输出汪汪叫和喵喵叫。