1、C+语言笔试-1 及答案解析(总分:80.00,做题时间:90 分钟)一、单项选择题(总题数:40,分数:80.00)1.算法的空间复杂度是指( )。A) 算法程序的长度B) 算法程序中的指令条数C) 算法程序所占的存储空间D) 算法执行过程中所需要的存储空间(分数:2.00)A.B.C.D.2.下列叙述中正确的是( )。A) 一个逻辑数据结构只能有一种存储结构B) 逻辑结构属于线性结构,存储结构属于非线性结构C) 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率(分数:2.00)A.B.C.D.3
2、.下列关于类、对象、属性和方法的叙述中,错误的是( )。A) 类是对一类具有相同的属性和方法对象的描述B) 属性用于描述对象的状态C) 方法用于表示对象的行为D) 基于同一个类产生的两个对象不可以分别设置自己的属性值(分数:2.00)A.B.C.D.4.在软件开发中,需求分析阶段产生的主要文档是( )。A) 数据字典 B) 详细设计说明书C) 数据流图说明书 D) 软件需求规格说明书(分数:2.00)A.B.C.D.5.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和( )。A) 编码设计 B) 测试阶段C) 运行阶段 D) 物理设计(分数:2.00)A.B.C.D.6.在下列关系运算中
3、,不改变关系表中的属性个数但能减少元组个数的是( )。A) 并 B) 交 C) 投影 D) 除(分数:2.00)A.B.C.D.7.下列叙述中,正确的是( )。A) 软件交付使用后还需要进行维护B) 软件一旦交付使用就不需要再进行维护C) 软件交付使用后其生命周期就结束D) 软件维护是指修复程序中被破坏的指令(分数:2.00)A.B.C.D.8.设一棵满二叉树共有 15 个结点,则在该满二叉树中的叶子结点数为( )。A) 7 B) 8 C) 9 D) 10(分数:2.00)A.B.C.D.9.设 R 是一个 2 元关系,有 3 个元组,S 是一个 3 元关系,有 3 个元组。如 T=RS,则
4、T 的元组的个数为( )。A) 6 B) 8 C) 9 D) 12(分数:2.00)A.B.C.D.10.下列选项中,不属于数据库管理的是( )。A) 数据库的建立 B) 数据库的调整C) 数据库的监控 D) 数据库的校对(分数:2.00)A.B.C.D.11.在下列横线处应添加的语句是( )。class Base public:void fun() cout“Base:fun“end1; ;class Derived:public Basepublic:void fun()/显示调用基类的 fun 函数cout“Derived:fun“end1;A) Derived:fun B) Base:
5、fun();C) Pubic:fun D) fun();(分数:2.00)A.B.C.D.12.( )提供了类对外部的接口,私有成员是类的内部实现,而保护成员不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。A) 公有成员 B) 私有成员C) 私有成员函数 D) 保护成员(分数:2.00)A.B.C.D.13.若类 A 和类 B 的定义如下:#includemalloc.hclass Aint i j;public:int geti()return i;class B:public Aint k;public:void make()k=i*j;A) k=i*j
6、; B) intk;C) return i; D) void make();(分数:2.00)A.B.C.D.14.在下面的类定义中,错误的语句是( )。class Samplepublic:Sample(int val); /Sample(); /private:int a=2.5; /Sample(); /;A) B) C) D) (分数:2.00)A.B.C.D.15.假定 MyClass 为一个类,则该类的拷贝初始化构造函数的声明语句是( )。A) MyClassB) MyClass(MyClass x)C) MyClass(MyClass D) MyClass(MyClass *x)
7、(分数:2.00)A.B.C.D.16.下面对静态数据成员的描述中,正确的是( )。A) 静态数据成员是类的所有对象共享的数据B) 类的每个对象都有自己的静态数据成员C) 类的不同对象有不同的静态数据成员值D) 静态数据成员不能通过类的对象调用(分数:2.00)A.B.C.D.17.关于运算符重载,下列表述中正确的是( )。A) C+已有的任何运算符都可以重载B) 运算符函数的返回类型不能声明为基本数据类型C) 在类型转换符函数的定义中不需要声明返回类型D) 可以通过运算符重载来创建 C+中原来没有的运算符(分数:2.00)A.B.C.D.18.不能作为函数重载的判断依据的是( )。A) co
8、nst B) 返回类型C) 参数个数 D) 参数类型(分数:2.00)A.B.C.D.19.有如下类的定义。横线处的语句是( )。class MyClasspublic:MyClass(int a=0,int b=0)X=a;Y=b;void Change()constX-=10;Y+=10;private:int X,Y;A) static B) constC) mutable D) 不需要填入内容(分数:2.00)A.B.C.D.20.有如下函数模板定义:templatetypename T1,int a2,int a3T1 sum(T1 a1)return(a1+a2+a3);则以下调用
9、中正确的是( )。A) sumint,4,3(5); B) sum4,3(5);C) sumint,int,int(5); D) sum(5);(分数:2.00)A.B.C.D.21.关于 new 运算符的下列描述中,错误的是( )。A) 它可以用来动态创建对象和对象数组B) 使用它创建的对象或对象数组可以通过运算符 delete 删除C) 使用它创建对象时要调用构造函数D) 使用它创建对象数组时必须指定初始值(分数:2.00)A.B.C.D.22.派生类的构造函数的成员初始化列中,不能包含( )。A) 基类的构造函数B) 派生类中子对象的初始化C) 基类的子对象初始化D) 派生类中一般数据成
10、员的初始化(分数:2.00)A.B.C.D.23.派生类的对象对它的基类成员中( )是可以访问的。A) 公有继承的公有成员 B) 公有继承的私有成员C) 公有继承的保护成员 D) 私有继承的公有成员(分数:2.00)A.B.C.D.24.C+类体系中,不能被派生类继承的有( )。A) 构造函数 B) 虚函数C) 静态成员函数 D) 赋值操作函数(分数:2.00)A.B.C.D.25.下列程序的输出结果是( )。#includeiostream.hvoid ff(int x),ff(double x);void main()float a(88.18);if(a);char b(a);if(b)
11、;void ff(int x)cout“ff(int): “xend1; void if(double x)cout“ff(double): “xend1; (分数:2.00)A.B.C.D.26.下列关于 this 指针的叙述中,正确的是( )。A) 任何与类相关的函数都有 this 指针B) 类的成员函数都有 this 指针C) 类的友元函数都有 this 指针D) 类的非静态成员函数才有 this 指针(分数:2.00)A.B.C.D.27.以下程序输出结果是( ):#includeiostreamusing namespace std;void add(int x,int y,int
12、*z)*z=y+x;int main()int a,b,c;add(8,4,add(6,a,add(a,b,couta“,“b“,“cend1;return 0;A) 12, 10, 14 B) 12, 18, 30C) 12, 6, 18 D) 12, 14, 30(分数:2.00)A.B.C.D.28.有如下程序:#includeiostream.husing namespace std;class TestClasspublic:TestClass () cout“default constructor/n“; TestClass (const TestClass ;TestClass
13、userCode(TestClass b) TestClass c(b);retum c;int main()TestClass a,d;cout“calling userCode()/n“;d=userCode(a);return 0;执行上面程序的过程中,构造函数 TestClass ()和 TestClass (const TestClass class TestClasspublic:TestClass(int r1,int r2)R1=r1;R2=r2;void print();void print()const;private:int R1,R2;void TestClass:pr
14、int()coutR 1 “,“R2end1;void YestClass:print()constcoutR1 “,“R2end1;int main()TestClass a(5,4);const TestClass b(20,52);b.print();return 0;执行后的输出结果是( )。A) 5,4 B) 20,52C) 0,0 D) 4,5(分数:2.00)A.B.C.D.30.静态数据成员是为( )的数据。A) 私有 B) 保护C) 所有对象共享 D) 类成员(分数:2.00)A.B.C.D.31.下列说法中错误的是( )。A) 公有继承时基类中的 public 成员在派生类
15、中仍是 public 的B) 公有继承时基类中的 private 成员在派生类中是 Dublic 的C) 私有继承时基类中的 public 成员在派生类中是 private 的D) 保护继承时基类中的 public 成员在派生类中是 protected 的(分数:2.00)A.B.C.D.32.有如下程序:#includeiostreamusing namespace std;class TestClasspublic:TestClass () cout“BB“;fun(); void fun() cout“Bf“;class TestClass1 :public TestClasspubli
16、c:TestClass 1() cout“DD“; void fun() cout“Df; ;int main()TestClass 1 d;return 0; 执行上面的程序将输出( )。A) BBBfDD B) BBDfDDDfC) DD D) DDBBBf(分数:2.00)A.B.C.D.33.下列程序中横线处正确的语句是( )。#includeiostreamusing namespace std;class TestClasspublic:void fun()cout“ TestClass: : fun“end1;class TestClass1 :public TestClassv
17、oid fun()_/,显示调用基类的函数 fun()cout“ TestClassl:fun“end1;A) fun(); B) TestClass.fun();C) TestClass:fun(); D) TestClass-fun();(分数:2.00)A.B.C.D.34.下面关于虚函数的描述中正确的是( )。A) 虚函数是一个静态成员函数B) 虚函数是一个非成员函数C) 虚函数既可以在函数说明时定义,也可以在函数实现时定义D) 派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型(分数:2.00)A.B.C.D.35.有如下程序:#includeiostreamusing na
18、mespace std;class TestClass1public:virtual void fun() cout“1“;class TestClass2:public TestClass 1public:TestClass2() cout“2“;class TestClass3:public TestClass2public:virtual void fun() TestClass2:fun();cout“3“;int main()TestClass1 aa,*p;TestClass2 bb;TestClass3 cc;p=p-fun();return ();执行上面程序的输出是( )。A
19、) 1122 B) 2112C) 2213 D) 2223(分数:2.00)A.B.C.D.36.有如下程序:#includeiostreamusing namespace std;long fun(int n)if(n2)return(fun(n- 1)+fun(n-2);elsereturn 2;int main()coutfun(3)end1;return 0;则该程序的输出结果应该是( )。A) 2 B) 3 C) 4 D) 5(分数:2.00)A.B.C.D.37.下列程序的输出结果是( )。#includeiostreamusing namespace std;templatety
20、pename TT fun(T a,T b)return(a=b)?a:b;void main()coutfun(3,6),fun(3.14F,6.28F)end1;A) 6,3.14 B) 3,6.28C) 3,3.14 D) 6,6.28(分数:2.00)A.B.C.D.38.针对数组定义 int data10;,下列表述中错误的是( ) 。A) 用*data 可访问到数组的首元素B) 用 data9可访问到数组的末元素C) 用 data10访问数组元素会超出数组边界D) data 共有 10 个元素,其首元素是 data1(分数:2.00)A.B.C.D.39.有如下类声明:class
21、Foointbar;;则 Foo 类的成员 bar 是( )。A) 公有数据成员 B) 公有成员函数C) 私有数据成员 D) 私有成员函数(分数:2.00)A.B.C.D.40.为了取代 C 中带参数的宏,在 C+中使用( )。A) 重载函数 B) 内联函数C) 递归函数 D) 友元函数(分数:2.00)A.B.C.D.C+语言笔试-1 答案解析(总分:80.00,做题时间:90 分钟)一、单项选择题(总题数:40,分数:80.00)1.算法的空间复杂度是指( )。A) 算法程序的长度B) 算法程序中的指令条数C) 算法程序所占的存储空间D) 算法执行过程中所需要的存储空间(分数:2.00)A
22、.B.C.D. 解析:解析 算法的空间复杂度是指执行这个算法所需要的内存空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行中所需要的额外空间。其中额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间。如果额外空间量相对于问题规模来说是常数,则称该算法是原地工作的。在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术,以便尽量减少不必要的额外空间。2.下列叙述中正确的是( )。A) 一个逻辑数据结构只能有一种存储结构B) 逻辑结构属于线性结构,存储结构属于非线性结构C) 一个逻辑数据结构可以有多种存储结构,且各种存
23、储结构不影响数据处理的效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率(分数:2.00)A.B.C.D. 解析:解析 数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,常用的存储结构有顺序和链式结构。采用不同的存储结构,其处理的效率是不同的。3.下列关于类、对象、属性和方法的叙述中,错误的是( )。A) 类是对一类具有相同的属性和方法对象的描述B) 属性用于描述对象的状态C) 方法用于表示对象的行为D) 基于同一个类产生的两个对象不可以分别设置自己的属性值(分数:2.00)A.B.C.D. 解析:解析 类是对
24、一类具有相同的属性和方法对象的描述,属性用于描述对象的状态,方法用于表示对象的行为,基于同一个类产生的两个对象是可以分别设置自己的属性值的。4.在软件开发中,需求分析阶段产生的主要文档是( )。A) 数据字典 B) 详细设计说明书C) 数据流图说明书 D) 软件需求规格说明书(分数:2.00)A.B.C.D. 解析:解析 需求分析的最终结果是生成软件需要规格说明书,可以为用户、分析人员和设计人员之间的交流提供方便。5.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和( )。A) 编码设计 B) 测试阶段C) 运行阶段 D) 物理设计(分数:2.00)A.B.C.D. 解析:解析 解析 数
25、据库设计目前一段采用生命周期法,即将整个数据库应用系统的开分解成目标独立的若干阶段,它们是:需要分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段、进一步修改阶段。在数据库设计中采用上面几个阶段中的前四个阶段,并且重点以数据结构和模型设计为主线。6.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是( )。A) 并 B) 交 C) 投影 D) 除(分数:2.00)A.B. C.D.解析:解析 关系 R 与 S 经交运算后所得到的关系是由那些既在 R 内又在 S 内的有序组所组成,记为RS,交运算不改变关系表中的属性个数但能减少元组个数。7.下列叙述中,
26、正确的是( )。A) 软件交付使用后还需要进行维护B) 软件一旦交付使用就不需要再进行维护C) 软件交付使用后其生命周期就结束D) 软件维护是指修复程序中被破坏的指令(分数:2.00)A. B.C.D.解析:解析 软件的运行和维护是指将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。而软件生命周期是指软件产品从提出、实现、使用维护到停止使用退役的过程。8.设一棵满二叉树共有 15 个结点,则在该满二叉树中的叶子结点数为( )。A) 7 B) 8 C) 9 D) 10(分数:2.00)A.B. C.D.解析:解析 在具有 n 个结点的满二叉树,其非叶
27、子结点数为 int(n/2),而叶子结点数等于总结点数减去非叶子结点数。本题 n=15,故非叶子结点数等于 int(15/21=7,叶子结点数等于 15-7=8。9.设 R 是一个 2 元关系,有 3 个元组,S 是一个 3 元关系,有 3 个元组。如 T=RS,则 T 的元组的个数为( )。A) 6 B) 8 C) 9 D) 12(分数:2.00)A.B.C. D.解析:解析 R 为 n 元关系,有 p 个元组 S 为 m 元关系,有 q 个元组。两个关系笛卡儿积是一个 n+m 元的关系,元组个数是 qp。所以 T 的元组的个数为 9 个。10.下列选项中,不属于数据库管理的是( )。A)
28、数据库的建立 B) 数据库的调整C) 数据库的监控 D) 数据库的校对(分数:2.00)A.B.C.D. 解析:解析 数据库管理一般包括:数据库的建立、数据库的调整、数据库的重组、数据库的安全性控制与完整性控制、数据库的故障恢复和数据库的监控。11.在下列横线处应添加的语句是( )。class Base public:void fun() cout“Base:fun“end1; ;class Derived:public Basepublic:void fun()/显示调用基类的 fun 函数cout“Derived:fun“end1;A) Derived:fun B) Base:fun();
29、C) Pubic:fun D) fun();(分数:2.00)A.B. C.D.解析:解析 此题考查的是成员函数的调用。因为横线处的作用是调用基类的 fun 函数,又因为派生类中也有 fun()函数,所以必须对 fun()函数加以限定,即 Base:am();。12.( )提供了类对外部的接口,私有成员是类的内部实现,而保护成员不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。A) 公有成员 B) 私有成员C) 私有成员函数 D) 保护成员(分数:2.00)A. B.C.D.解析:解析 此题考查的是公有成员的特点。公有成员允许可使用者访问,提供了类对外部的接口
30、。13.若类 A 和类 B 的定义如下:#includemalloc.hclass Aint i j;public:int geti()return i;class B:public Aint k;public:void make()k=i*j;A) k=i*j; B) intk;C) return i; D) void make();(分数:2.00)A. B.C.D.解析:解析 因为派生类不能访问基类的私有成员 i 和 j(默认情况下,成员的属性为私有),所以表达式 k=i*j 是非法的。其余的访问权限都是许可的。14.在下面的类定义中,错误的语句是( )。class Samplepubl
31、ic:Sample(int val); /Sample(); /private:int a=2.5; /Sample(); /;A) B) C) D) (分数:2.00)A.B.C. D.解析:解析 是错误的,因为在类体内,不允许对所定义的数据成员进行初始化;其他语句构造和析构函数的定义都是正确的。15.假定 MyClass 为一个类,则该类的拷贝初始化构造函数的声明语句是( )。A) MyClassB) MyClass(MyClass x)C) MyClass(MyClass D) MyClass(MyClass *x)(分数:2.00)A.B.C. D.解析:解析 拷贝构造函数是一个特殊的
32、构造函数,它用一个已知的对象初始化一个正在创建的同类对象,它的一般格式是:类名:类名(const 类名Y=b;void Change()constX-=10;Y+=10;private:int X,Y;A) static B) constC) mutable D) 不需要填入内容(分数:2.00)A.B.C. D.解析:解析 C+中 const 关键字用来表示一个常量,同时 const 也用来修饰函数。这两个概念需要明确:const 所修饰的函数只能是类的成员函数,因为 const 所修饰的函数中,要由编译器负责保护类的成员变量不被修改。而相对的,mutable 则是用来修饰类的成员变量,让该
33、变量在 const 所修饰的成员函数中可以被修改。而且 const 修饰的函数只能是类的成员函数,mutable 修饰的变量只能是类的成员变量。20.有如下函数模板定义:templatetypename T1,int a2,int a3T1 sum(T1 a1)return(a1+a2+a3);则以下调用中正确的是( )。A) sumint,4,3(5); B) sum4,3(5);C) sumint,int,int(5); D) sum(5);(分数:2.00)A. B.C.D.解析:解析 本题考查的函数模板的使用,有时不能根据用户传进来的参数决定所有模板函数的值类型,如函数的返回值,还有用
34、户希望自己指定参数类型,这时就需要显式地指出参数模板的类型,显示指定模板的类型格式为:返回值类型函数模板(参数表)。21.关于 new 运算符的下列描述中,错误的是( )。A) 它可以用来动态创建对象和对象数组B) 使用它创建的对象或对象数组可以通过运算符 delete 删除C) 使用它创建对象时要调用构造函数D) 使用它创建对象数组时必须指定初始值(分数:2.00)A.B.C.D. 解析:解析 用 new 创建对象是不用显式调用构造函数的,它自己会自动调用。22.派生类的构造函数的成员初始化列中,不能包含( )。A) 基类的构造函数B) 派生类中子对象的初始化C) 基类的子对象初始化D) 派
35、生类中一般数据成员的初始化(分数:2.00)A.B.C. D.解析:解析 派生类的构造函数会调用基类的构造函数。对于基类子对象的初始化会在基类的构造函数中进行。派生类会为基类提供参数,当基类的构造函数收到参数时会将参数传递给相应的基类子对象。23.派生类的对象对它的基类成员中( )是可以访问的。A) 公有继承的公有成员 B) 公有继承的私有成员C) 公有继承的保护成员 D) 私有继承的公有成员(分数:2.00)A. B.C.D.解析:解析 只要是派生类,都可以丛基类中继承,除非把基类的构造函数定义为私有的,这样派生类无法构造。24.C+类体系中,不能被派生类继承的有( )。A) 构造函数 B)
36、 虚函数C) 静态成员函数 D) 赋值操作函数(分数:2.00)A. B.C.D.解析:解析 不能被继承的有构造函数、拷贝构造函数、赋值函数、析构函数。25.下列程序的输出结果是( )。#includeiostream.hvoid ff(int x),ff(double x);void main()float a(88.18);if(a);char b(a);if(b);void ff(int x)cout“ff(int): “xend1; void if(double x)cout“ff(double): “xend1; (分数:2.00)A. B.C.D.解析:解析 本题主要考查函数调用时
37、从实参到形参的类型一致性。相同类型或小类型的实参可以传给大类型的形参,但是不允许大类型的实参传给小类型的形参。26.下列关于 this 指针的叙述中,正确的是( )。A) 任何与类相关的函数都有 this 指针B) 类的成员函数都有 this 指针C) 类的友元函数都有 this 指针D) 类的非静态成员函数才有 this 指针(分数:2.00)A.B.C.D. 解析:解析 this 指针是成员函数所属对象的指针,它指向类对象的地址;它隐含于每个类的非静态成员函数中;this 指针只能在类的成员函数中使用,它指向该成员函数被调用的对象;静态成员函数没有this 指针,因为类中只有一个静态成员函
38、数实例,使用 this 指针无意义。27.以下程序输出结果是( ):#includeiostreamusing namespace std;void add(int x,int y,int *z)*z=y+x;int main()int a,b,c;add(8,4,add(6,a,add(a,b,couta“,“b“,“cend1;return 0;A) 12, 10, 14 B) 12, 18, 30C) 12, 6, 18 D) 12, 14, 30(分数:2.00)A.B. C.D.解析:解析 由主函数 main 入手,调用 add 函数,其中第三个参数为引用,即传值为地址。当 add
39、函数中第三个参数改变时,主函数中这个值也会改变。那么第一个 add 调用后 a=12,所以第二个调用中a=12。调用后 b=18。那么第三个调用后 c=30。28.有如下程序:#includeiostream.husing namespace std;class TestClasspublic:TestClass () cout“default constructor/n“; TestClass (const TestClass ;TestClass userCode(TestClass b) TestClass c(b);retum c;int main()TestClass a,d;cou
40、t“calling userCode()/n“;d=userCode(a);return 0;执行上面程序的过程中,构造函数 TestClass ()和 TestClass (const TestClass ”语句 d 中调用成员为 a 的 userCode()成员函数,所以是 3 次。29.有如下程序:#includeiostreamusing namespace std;class TestClasspublic:TestClass(int r1,int r2)R1=r1;R2=r2;void print();void print()const;private:int R1,R2;void
41、 TestClass:print()coutR 1 “,“R2end1;void YestClass:print()constcoutR1 “,“R2end1;int main()TestClass a(5,4);const TestClass b(20,52);b.print();return 0;执行后的输出结果是( )。A) 5,4 B) 20,52C) 0,0 D) 4,5(分数:2.00)A.B. C.D.解析:解析 常对象只能调用其中的 const 成员函数,即“const TestClass b(20,52);”只能调用“void print()const;”。常对象保证所有数据
42、成员的数值不被修改,所以这里是 20,52。30.静态数据成员是为( )的数据。A) 私有 B) 保护C) 所有对象共享 D) 类成员(分数:2.00)A.B.C. D.解析:解析 静态数据成员是一种特殊的数据成员。静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。所有对象共享这些静态数据成员,都可以引用它。31.下列说法中错误的是( )。A) 公有继承时基类中的 public 成员在派生类中仍是 public 的B) 公有继承时基类中的 private 成员在派生类中是 Dublic 的C) 私有继承时基类中的 public 成员在派生类中是 private
43、的D) 保护继承时基类中的 public 成员在派生类中是 protected 的(分数:2.00)A.B. C.D.解析:解析 公有继承中,基类的公有成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。所以 B 是错误的,即选择 B)。32.有如下程序:#includeiostreamusing namespace std;class TestClasspublic:TestClass () cout“BB“;fun(); void fun() cout“Bf“;class TestClass1 :public TestClasspublic:TestClass 1() cou
44、t“DD“; void fun() cout“Df; ;int main()TestClass 1 d;return 0; 执行上面的程序将输出( )。A) BBBfDD B) BBDfDDDfC) DD D) DDBBBf(分数:2.00)A. B.C.D.解析:解析 TestClass 是 TestClass1 的基类。由主函数 main 入手,定义 TestClass1 的对象 d,调用基类 TestClass 构造函数输出:BB,调用基类成员函数 fun 输出 Bf,然后调用派生类的构造函数,输出DD。33.下列程序中横线处正确的语句是( )。#includeiostreamusing
45、 namespace std;class TestClasspublic:void fun()cout“ TestClass: : fun“end1;class TestClass1 :public TestClassvoid fun()_/,显示调用基类的函数 fun()cout“ TestClassl:fun“end1;A) fun(); B) TestClass.fun();C) TestClass:fun(); D) TestClass-fun();(分数:2.00)A.B.C. D.解析:解析 程序中的 TestClassl 为 TestClass 的派生类,TestClass1 公
46、有继承 TestClass,所以可以调用其中的公有成员 fun 函数,如果要显示调用它,那么使用域符号“:”,这样就实现了对函数的显示调用,即选择 C)。34.下面关于虚函数的描述中正确的是( )。A) 虚函数是一个静态成员函数B) 虚函数是一个非成员函数C) 虚函数既可以在函数说明时定义,也可以在函数实现时定义D) 派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型(分数:2.00)A.B.C.D. 解析:解析 在基类中用 virtual 声明成员函数为虚函数,所以 AB 错误。在派生类中重新定义此函数,要求函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同。35.有如下程序
47、:#includeiostreamusing namespace std;class TestClass1public:virtual void fun() cout“1“;class TestClass2:public TestClass 1public:TestClass2() cout“2“;class TestClass3:public TestClass2public:virtual void fun() TestClass2:fun();cout“3“;int main()TestClass1 aa,*p;TestClass2 bb;TestClass3 cc;p=p-fun();
48、return ();执行上面程序的输出是( )。A) 1122 B) 2112C) 2213 D) 2223(分数:2.00)A.B.C. D.解析:解析 主函数中定义 TestClass1 的对象 aa,*p 对象指针,TestClass2 的对象 bb 以及TestClass3 的对象 cc。p 指向 cc,TestClass3 为 TestClass2 的派生类,构造函数输出 2。TestClass3中 fun 函数中为 TestClass2 中的 fun,调用 TestClass2 的构造函数,输出 2。“p-fun();”,TestClass2 继承于 TestClass1 中的 fun,所以输出 1。然后输出 TestClass3 中的“cout”3”,即输出 3。36.有如下程序:#includeiostreamusing namespace std;long fun(int n)if(n2)return(fun(n- 1)+fun(n-2);elsereturn 2;in