1、二级 C+笔试-252 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.关于关键字 class 和 typename,下列描述中正确的是( )。(分数:2.00)A.程序中所有的 class 都可以替换为 typenameB.程序中所有的 typename 都可以替换为 classC.选项 A)和D.选项 A)和2.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对3.有如下程序:#
2、includeiostreamusing namespace std;class VACpublic:int f() constreturn 3;int f() return 5;;int main()VAC v1;const VAC v2;coutv1.f()v2.f();return 0;运行时的输出结果是( )。(分数:2.00)A.53B.35C.55D.334.下列叙述中,错误的是( )。(分数:2.00)A.派生类可以使用 private 派生B.对基类成员的访问必须是无二义性的C.基类成员的访问能力在派生类中维持不变D.赋值兼容规则也适用于多继承的组合5.下列叙述中正确的是( )
3、。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率6.设计程序时,应采纳的原则之一是( )。(分数:2.00)A.程序的结构应有助于读者的理解B.限制 GOTO 语句的使用C.减少或取消注释行D.程序越短越好7.派生类中的成员不能直接访问基类中的( )成员。(分数:2.00)A.publicB.privateC.virtualD.protected8.有如下程序:#includeiostream
4、using namespace std;Class TestClassprivate:int x,y;public:TestClass(int i,int j)x=i;y=j;Void print()cout“print1“endl;void print()constcout“print2“endl;int main()const TestClass a(1,2);a.print();return 0;该程序运行后的输出结果是( )。(分数:2.00)A.print1B.print2C.print1 print2D.程序编译时出错9.( )既可重载为一元运算符,又可重载为二元运算符。(分数:2
5、.00)A.“*”B.“=”C.“=”和“*”D.“*”和“*+”10.下列是重载乘法运算符的函数原型声明,其中错误的是( )。(分数:2.00)A.MyClass operator*(double,double);B.MyClass operator*(double,MyClass);C.MyClass operator*(MyClass,double);D.MyClass operator*(MyClass,MyClass);11.有如下函数模板声明:templatetypename TTMax(T a,T b)return(a=b)?a:b;下列对函数模板 Max()的调用中错误的是(
6、)。(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4)C.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)12.关于关键字 class 和 typename,下列表述中正确的是( )。(分数:2.00)A.程序中的 typename 都可以替换为 classB.程序中的 class 都可以替换为 typenameC.在模板形参表中只能用 typename 来声明参数的类型D.在模板形参表中只能用 class 或 typename 来声明参数的类型13.有如下程序:#includeiostreamusing namespace std;int main
7、()void function(double val);double val;function(val);coutval;return 0;void function(double val)val=3;编译运行这个程序将出现的情况是( )。(分数:2.00)A.编译出错,无法运行B.输出:3C.输出:3.0D.输出一个不确定的数14.下列表达式的值为 false 的是( )。(分数:2.00)A.13TestClass(char c)coutc;;class TestClass1:public TestClasspublic:TestClass1(char C) coutc;;int main
8、()TestClass1 d1(y);return 0;执行这个程序,屏幕上将显示输出( )。(分数:2.00)A.yB.yxC.xyD.yy20.下列关于结构化程序设计原则和方法的描述中错误的是( )。(分数:2.00)A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用 GOTO 语句D.语言中所没有的控制结构,应该采用前后一致的方法来模拟21.有如下程序:#includeiostreamusing namespace std;class TestClassint a;public:TestClass(int x)a=x;void s
9、how()couta;;class TestClass1:public TestClassint b;public:TestClass1(int i):TestClass(i+1),b(i)void show()coutb;;int main()TestClass b(5),*p;TestClass1 d(1);p=Amount TestClass()i-;static int getVal()return i;;int TestClass:i=O;void fun()TestClass ob2;coutob2.getVal();int main()TestClass ob1;fun();Te
10、stClass*ob3=new TestClass;coutob3-getVal();delete ob3;coutTestClass:getVal();return 0;(分数:2.00)A.111B.121C.211D.22131.在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送( )。(分数:2.00)A.调用语句B.命令C.口令D.消息32.下列特征中不是面向对象方法的主要特征的是( )。(分数:2.00)A.多态性B.继承C.封装性D.模块化33.执行下列程序的结果是( )。#includeiostream.hvoid main()char *str;str=“tes
11、t!“;coutstr5;(分数:2.00)A.test!B.testC.空字符D.异常34.执行下列语句序列:int i=0;while(i25)i+=3;couti;输出结果是( )。(分数:2.00)A.24B.25C.27D.2835.设有下列定义语句:int a32=10,20, 30,40, 50,60;int b32=10,20, 30,40, 50,60;则 a11*b21的结果为( )。(分数:2.00)A.2000B.1200C.2400D.3000二、填空题(总题数:15,分数:30.00)36.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化
12、为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:2.00)填空项 1:_37.注释一般分为序言性注释和 1 注释。(分数:2.00)填空项 1:_38.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_39.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_40.数据流图的类型有 1 和事务型。(分数:2.00)填空项 1:_41.在多继承中基类和派生类中同时出现 1 存在二义性。(分数:2.00)填空项 1:_42.有如下程序:#includeiostreamusing namespace std;class
13、 TestClass1public:TestClass1()cout“A“;;class TestClass2public:TestClass2()cout“B“;;class TestClass3;public TestClass1TestClass2 b;public:TestClass3()cout“C“;;int main()TestClass3 obj;return 0;该程序执行后的输出结果是_。(分数:2.00)填空项 1:_43.编译时的多态性可以通过使用 1 获得。(分数:2.00)填空项 1:_44.如果使用数组名称为函数参数,形实结合时,传递的是 1。(分数:2.00)填
14、空项 1:_45.在类的对象被创建时, 1 函数会被自动调用。(分数:2.00)填空项 1:_46.下列程序的执行结果是_。#includeiostream.h#includeiomanip.husing namespace std;voidmain()coutsetfill(x)setw(10);cout“Hello“end1;(分数:2.00)填空项 1:_47.请将下列类定义补充完整。class Base(public:void fun()cout“Base:fun“endl;;class Derived:public Basepublic:void fun()_ /显式调用基类的 fu
15、n 函数cout“Derived:fun“endl;(分数:2.00)填空项 1:_48.有如下程序:#includeiostreamusing namespace std;class ONEpublic:virtual void f()cout“1“;;class TWO:public ONEpublic:TWO()cout“2“;;class THREE:public TWOpublic:vurtual void f() TOW:f();cout“3“;;int main()ONE aa,*p;TWO bb;THREE cc;p= /给 Foo 的数据成员 value 赋值void pri
16、nt()coutvalue;;int main()Foo f;f.setValue(42);f.print();return 0;(分数:2.00)填空项 1:_二级 C+笔试-252 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.关于关键字 class 和 typename,下列描述中正确的是( )。(分数:2.00)A.程序中所有的 class 都可以替换为 typenameB.程序中所有的 typename 都可以替换为 class C.选项 A)和D.选项 A)和解析:解析 模板形参有 3 种形式:typename 参数名;clas
17、s 参数名;类型修饰参数名。前两种是等价的,在声明模板参数时,关键字 typename 和 class 可以互换。2.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度大,则其空间复杂度必定小D.上述三种说法都不对 解析:解析 算法的时间复杂度和算法的空间复杂度从不同的角度来衡量算法的执行情况,它们之间没有内在联系。3.有如下程序:#includeiostreamusing namespace std;class VACpublic:int f() constreturn 3;in
18、t f() return 5;;int main()VAC v1;const VAC v2;coutv1.f()v2.f();return 0;运行时的输出结果是( )。(分数:2.00)A.53 B.35C.55D.33解析:解析 此题考查的是常成员函数的应用。VAC 类中说明了两个函数,一个是常成员函数,一个是普通函数:在主函数中说明了两个对象,通过普通对象 v1 调用的是普通函数,输出 5:通过常对象 v2 调用的是常成员函数,输出 3。4.下列叙述中,错误的是( )。(分数:2.00)A.派生类可以使用 private 派生B.对基类成员的访问必须是无二义性的C.基类成员的访问能力在派
19、生类中维持不变 D.赋值兼容规则也适用于多继承的组合解析:解析 在建立派生类时,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的公用成员直接作为派生类的公用成员。涉及如何确定基类的成员在派生类中的访问属性问题,不仅要考虑对基类成员所声明的访问属性,还要考虑派生类所声明的对基类的继承方式,根据这两个因素共同决定基类成员在派生类中的访问属性。所以本题选择选项 C)。5.下列叙述中正确的是( )。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数
20、据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 解析:解析 数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,常用的存储结构有顺序和链式结构。采用不同的存储结构,其处理的效率是不同的。6.设计程序时,应采纳的原则之一是( )。(分数:2.00)A.程序的结构应有助于读者的理解 B.限制 GOTO 语句的使用C.减少或取消注释行D.程序越短越好解析:解析 程序设计的风格主要强调程序的简单、清晰和可理解性,以便读者理解。程序滥用 GOTO 语句将使程序流程无规律,可读性差;添加注释行有利于对程序的理解,不应减少或取消,程序的长短要
21、依据实际的需要而定,并不是越短越好。7.派生类中的成员不能直接访问基类中的( )成员。(分数:2.00)A.publicB.private C.virtualD.protected解析:解析 即使是共有继承,其私有成员仍为私有,无法访问。8.有如下程序:#includeiostreamusing namespace std;Class TestClassprivate:int x,y;public:TestClass(int i,int j)x=i;y=j;Void print()cout“print1“endl;void print()constcout“print2“endl;int ma
22、in()const TestClass a(1,2);a.print();return 0;该程序运行后的输出结果是( )。(分数:2.00)A.print1B.print2 C.print1 print2D.程序编译时出错解析:解析 由主函数 main 入手,定义 TestClass 型的常对象 a,然后调用对象 a 中的成员函数 print()。因为在 C+中,如果一个对象被声明为常对象,则不能调用该对象中的非 const 型的成员函数。所以,这里调用的是对象中的 const 型成员函数“void print()const”,输出为 print2。9.( )既可重载为一元运算符,又可重载为
23、二元运算符。(分数:2.00)A.“*” B.“=”C.“=”和“*”D.“*”和“*+”解析:解析 此题考查的是运算符的有关概念。“*”是二元运算符,既可以用于间接访问也可用于两数相乘;而“=”和“*+”都是一元运算符。10.下列是重载乘法运算符的函数原型声明,其中错误的是( )。(分数:2.00)A.MyClass operator*(double,double); B.MyClass operator*(double,MyClass);C.MyClass operator*(MyClass,double);D.MyClass operator*(MyClass,MyClass);解析:解
24、析 此题考查的是乘法运算符的重载函数原型声明。因为操作的对象是类对象,所以重载函数的参数至少有一个是类对象。故选项 A)中两个参数都为 double 型是错误的。11.有如下函数模板声明:templatetypename TTMax(T a,T b)return(a=b)?a:b;下列对函数模板 Max()的调用中错误的是( )。(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4) C.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)解析:解析 此题考查的是函数模板的引用。引用模板函数和引用一般函数在语法形式上基本相同。需要注意的是,说明一个函数模板后
25、,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中的对应形参。本题选项 B)中,编译系统从第一个参数“3.5”获得信息“double 型数据”和从第二个参数获得信息“血型数据”两者矛盾,选项 A)、C)正确;选项 D)中,函数名后的double是模板实参表,编译系统会将 int 型的形参“4”自动转化成 double 类型。12.关于关键字 class 和 typename,下列表述中正确的是( )。(分数:2.00)A.程序中的 typename 都可以替换为 class B.程序中的 class 都可以替换为 typenameC.在模板形参表中只能用 typ
26、ename 来声明参数的类型D.在模板形参表中只能用 class 或 typename 来声明参数的类型解析:解析 在模板中,定义模板类型 templateclass T和 templatetypename T都是一样的,有时用 class 容易引起混淆,所以在标准化时引入了关键字 typename。13.有如下程序:#includeiostreamusing namespace std;int main()void function(double val);double val;function(val);coutval;return 0;void function(double val)v
27、al=3;编译运行这个程序将出现的情况是( )。(分数:2.00)A.编译出错,无法运行B.输出:3C.输出:3.0D.输出一个不确定的数 解析:解析 此题考查的是函数参数的传递。c+语言中,函数在传递参数时,总是将实参的值传递给被调用函数的形参,即传值调用。因此,在函数中对形参所作的任何操作都不会改变实参的值。14.下列表达式的值为 false 的是( )。(分数:2.00)A.13TestClass(char c)coutc;;class TestClass1:public TestClasspublic:TestClass1(char C) coutc;;int main()TestCl
28、ass1 d1(y);return 0;执行这个程序,屏幕上将显示输出( )。(分数:2.00)A.yB.yxC.xy D.yy解析:解析 程序中的类 TestClass 为基类,TestClassl 为 TestClass 的派生类。由 main 主函数入手,定义 TestClassl 类型的对象 d1,参数值为 y。TestClass1 类继承 TestClass,所以主函数中“TestClass1 dl(y);”语句首先调用“TestClass1(char c)coutc;”然后调用基类中的“TestClass()coutx;”输出 x,然后执行“TestClass(char c)cou
29、tc;”输出 y,即答案为“xy”。20.下列关于结构化程序设计原则和方法的描述中错误的是( )。(分数:2.00)A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用 GOTO 语句 D.语言中所没有的控制结构,应该采用前后一致的方法来模拟解析:解析 限制使用 GOTO 语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用 GOTO 语句。其他 3 项为结构化程序设计的原则。21.有如下程序:#includeiostreamusing namespace std;class TestClassint a;public:TestCl
30、ass(int x)a=x;void show()couta;;class TestClass1:public TestClassint b;public:TestClass1(int i):TestClass(i+1),b(i)void show()coutb;;int main()TestClass b(5),*p;TestClass1 d(1);p=”是将 i 的地址赋值给指针,这是*ip 的数值为 i 的数值 100。然后“int k=*ip;”,k 的值赋值为*ip 的数值,即 100。23.定义如下枚举类型:enum Numberone=1,two=2,four=4,eight=8
31、,则枚举类型 Number 的取值范围是( )。(分数:2.00)A.18B.08C.115D.015 解析:解析 enum枚举类型名枚举元素表;其中,关键词 enum 表示定义的是枚举类型,枚举类型名由标识符组成,而枚举元素表由枚举元素或枚举常量组成。其中如果默认,枚举类型从 0 开始赋值,本题中最大值为 8,那么它与其他值和的最大计算结果为 15,所以它的取值范围为 015。24.派生类的构造函数的成员初始化列表中,不能包含( )。(分数:2.00)A.基类的构造函数B.派生类中子对象的初始化C.基类中子对象的初始化 D.派生类中一般数据成员的初始化解析:解析 构造函数的主要作用是对数据成
32、员初始化。在设计派生类的构造函数中,不仅要考虑派生类所增加数据成员的初始化,还应考虑基类中构造函数的初始化。子对象是对象中的对象,子对象的初始化是在建立派生类时通过调用派生类构造函数来实现。所以派生类构造函数的任务包括 3 部分,对基类数据成员初始化;对子对象数据成员初始化;对派生类数据成员初始化。即本题选择选项 C)。25.有如下函数模板定义:templatetypename T1,int a2,int a3T1 fun(T1 a1)return(a1+a2+a3);则以下调用中正确的是( )。(分数:2.00)A.funint,4,3(5); B.fun4,3(5);C.funint,in
33、t,int(5);D.fun(5);解析:解析 类模板是类的抽象,类是类模板的实例。在调用时,尖括号内指定实际的类型名,在编译时,编译系统就用 int 取代类模板中的类型参数,这样就具体化了类模板。其中的参数为 4,3。26.以下( )成员函数表示纯虚函数。(分数:2.00)A.virtual int fun(int)B.void fun(int)=0C.virtual void fun()=0 D.virtual void fun(int)解析:解析 纯虚函数是在声明虚函数时被“初始化”为。的函数。定义的一般形式为:virtual 函数类型函数名(参数列表)=0。所以排除选项 A)、B)、D
34、)。27.有如下程序:#includeiostreamUsing namespace std;Class Amountint amount;public;Amount(int n=0):amount(n)Int getAmount()constreturn amount;Amount TestClass()i-;static int getVal()return i;;int TestClass:i=O;void fun()TestClass ob2;coutob2.getVal();int main()TestClass ob1;fun();TestClass*ob3=new TestCla
35、ss;coutob3-getVal();delete ob3;coutTestClass:getVal();return 0;(分数:2.00)A.111B.121C.211D.221 解析:解析 由主函数 mian 入手,首先定义 TestClass 对象 ob1,调用构造函数后,i 等于 1。“int TestClass:i=0”语句中 i 首先赋值为 0,它是静态函数可以被所有对象引用,当静态成员变量的值改变后,则在各对象中这个数据成员的值都同时改变。主函数中首先调用 fun 函数,其中又定义了对象 ob2,调用 getVal;i 等于 2,输出。主函数“obj*ob3=new Test
36、Class;coutob3-getVal();”动态分配,i 等于 2,输出。“delete ob3;”析构函数后,i 等于 1,然后输出 1。即 221。31.在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送( )。(分数:2.00)A.调用语句B.命令C.口令D.消息 解析:解析 在面向对象方法中,对象之间通过消息进行通信。消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎么完成这些处理,接受者独立决定采用什么方式完成所需的处理。32.下列特征中不是面向对象方法的主要特征的是( )。(分数:2.00)A.多态性B.继承C.封装性D.模块化 解析:解
37、析 面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是,使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括分类性、多态性、封装性、模块独立性、继承和多态性等。模块化是结构化程序设计的特点。33.执行下列程序的结果是( )。#includeiostream.hvoid main()char *str;str=“test!“;coutstr5;(分数:2.00)A.test!B.testC.空字符 D.异常解析:解析 字符指针 str 值为“test!”,它们的下标由 0 开始,并且具有一个尾符,输出 str5的位置为尾符标识,指针字符指向的尾符为空。所以答案为空字符。34.
38、执行下列语句序列:int i=0;while(i25)i+=3;couti;输出结果是( )。(分数:2.00)A.24B.25C.27 D.28解析:解析 此题考查的是循环语句 while 的使用。i 为 3 的倍数,当 i=24 时,i25,执行 while 的循环体 i+=3,则 i=27,不满足 i25 的条件,结束循环。35.设有下列定义语句:int a32=10,20, 30,40, 50,60;int b32=10,20, 30,40, 50,60;则 a11*b21的结果为( )。(分数:2.00)A.2000B.1200C.2400 D.3000解析:解析 只为 a 中由第
39、0 个位置开始,所以 a11*b21为二维数组中,第二行二列乘以 b 中第三行二列,即 40*60。二、填空题(总题数:15,分数:30.00)36.在程序设计阶段应该采取 1 和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。(分数:2.00)填空项 1:_ (正确答案:自顶向下)解析:解析 程序设计时,应先考虑总体,后考虑细节,逐步使问题具体化,对复杂的问题,应该设计一些子目标作为过渡。上述方法概括为:自顶向下,逐步求精。37.注释一般分为序言性注释和 1 注释。(分数:2.00)填空项 1:_ (正确答案:功能性)解析:解析 注释一般分为
40、序言性注释和功能性注释。序言性注释通常位于每个程序的开头部分,给出程序的整体说明;功能性注释的位置一般嵌在源程序体中,主要描述其后的语句或程序做什么。38.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_ (正确答案:对象)解析:解析 在面向对象的程序设计方法中,类是具有相同属性或方法的对象的抽象,对象是类的实例。39.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:19)解析:解析 在任意一棵二叉树中,度数为 0 的结点(即叶子结点)总比度为 2 的结点多一个,因此该二叉树中叶子结点为 18+1=19。
41、40.数据流图的类型有 1 和事务型。(分数:2.00)填空项 1:_ (正确答案:变换型)解析:解析 典型的数据流类型有两种:变换型和事务型。41.在多继承中基类和派生类中同时出现 1 存在二义性。(分数:2.00)填空项 1:_ (正确答案:同名函数)解析:解析 如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,这样存在的同名函数无法判断调用的确定性。即存在二义性。42.有如下程序:#includeiostreamusing namespace std;class TestClass1public:TestClass1()cout“A“;;class TestClass2pu
42、blic:TestClass2()cout“B“;;class TestClass3;public TestClass1TestClass2 b;public:TestClass3()cout“C“;;int main()TestClass3 obj;return 0;该程序执行后的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:ABC)解析:解析 主函数中定义 TestClass3 对象 obj,其中 TestClass3 继承于 TestClass1,先初始化基类构造函数,所以输出 A。然后在 TestClass3 中定义 TestClass2 对象 b,输出 B,最后派生类的
43、构造函数输出 C。所以答案为 ABC。43.编译时的多态性可以通过使用 1 获得。(分数:2.00)填空项 1:_ (正确答案:虚函数和对象)解析:解析 多态性是指一个接口,多种方法。而虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且通过基类指针或引用来访问基类和派生类中的同名函数。通过对象名调用的虚函数,是在运行阶段把虚函数和类对象“绑定”在一起的。44.如果使用数组名称为函数参数,形实结合时,传递的是 1。(分数:2.00)填空项 1:_ (正确答案:地址)解析:解析 此题考查的是函数参数的传递方式。函数参数的传递方式分为传值和传地址两种。使用数组名作为函数参数,因为数组名代表的
44、是数组的首地址,所以传递的是地址。45.在类的对象被创建时, 1 函数会被自动调用。(分数:2.00)填空项 1:_ (正确答案:构造)解析:解析 此题考查的是构造函数的应用。构造函数的作用是在对象被创建时利用特定的值构造对象,构造函数在对象被创建时由系统自动调用。46.下列程序的执行结果是_。#includeiostream.h#includeiomanip.husing namespace std;voidmain()coutsetfill(x)setw(10);cout“Hello“end1;(分数:2.00)填空项 1:_ (正确答案:xxxxxHello)解析:解析 此题考查的是 I
45、/O 的格式化输出。Setfill(x)表示填充字符为 V,并且一直有效;setw(10)表示将输入输出的宽度设置为 10,宽度设置的效果只对以此次输入或输出有效,在完成一个数据的输入或输出后,宽度自动恢复为 0;题目中字符串“Hello”的宽度不够 10,所以其前面将有 5 个填充符 V。47.请将下列类定义补充完整。class Base(public:void fun()cout“Base:fun“endl;;class Derived:public Basepublic:void fun()_ /显式调用基类的 fun 函数cout“Derived:fun“endl;(分数:2.00)填
46、空项 1:_ (正确答案:Base:fun();)解析:解析 此题考查的是虚基类的使用。使用符号“:”可以用来限定要访问的成员所在类的名称。在派生类中对基类成员的访问应该是唯一的,但是,多继承情况下就需要通过使用对象作用域分辨来解决这种对基类成员访问的二义性问题。48.有如下程序:#includeiostreamusing namespace std;class ONEpublic:virtual void f()cout“1“;;class TWO:public ONEpublic:TWO()cout“2“;;class THREE:public TWOpublic:vurtual void
47、 f() TOW:f();cout“3“;;int main()ONE aa,*p;TWO bb;THREE cc;p= /给 Foo 的数据成员 value 赋值void print()coutvalue;;int main()Foo f;f.setValue(42);f.print();return 0;(分数:2.00)填空项 1:_ (正确答案:this-value 或 Foo:value)解析:解析 由于 Foo 类的数据成员和函数的形参名称都是 value,如果在函数中直接使用 value 引用的是形参变量而不是 Foo 类的数据成员。解决办法有两种:一是通过 this 指针,在类的成员函数