1、二级 C+分类模拟 282及答案解析(总分:69.50,做题时间:90 分钟)一、选择题(总题数:40,分数:69.50)1.下列语句中,正确的是_。(分数:2.00)A.char*myString=“Hello-World!“;B.char myString=“Hello-World!“;C.char myString11=“Hello-World!“;D.char myString12=“Hello-World!“;2.下列叙述中正确的是_。(分数:1.00)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循
2、环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定3.有下列程序: #include stdio.h void main() char a=4; printf(“%d/n“,a=a1); 程序的运行结果是_。(分数:2.50)A.40B.16C.8D.44.有如下函数模板定义: templateclass T T func(T x,T y)return x*x+y*y; 在下列对 func的调用中,错误的是_。(分数:2.00)A.func(3,5);B.func(3.0,5.5);C.func(3,5.5);D.funcint(3,
3、5.5);5.有如下类定义: class Bag public: Bag(int p, char s=“M“):price(p), size(s) count+; Bag()count-; int GetPrice() return price; int GetPrice() const return price; void SetPrice(int val) const price=val; private: int price; char size; static int count; ; 下列关于类成员的叙述中,正确的是_。(分数:1.00)A.成员函数 GetPrice存在重定义B.构
4、造函数的参数不能设置默认值C.析构函数中不能访问静态数据成员D.成员函数 SetPrice不能定义为常函数6.假定 AB为一个类,则执行 AB x;语句时将自动调用该类的(分数:2.00)A.有参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数7.下列关系运算中,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是 _ 。(分数:2.00)A.选择B.连接C.投影D并8.有如下程序段: int i=100; while(int i=10)cout“*“;i-; 运行时输出“*“的个数是_。(分数:2.00)A.0B.100C.10D.无穷9.下面是类 MyClass的定义,对定
5、义中各语句描述正确的是_。 class MyClass public: void MyClass(int a) X=a; / int f(int a,int b) / X=a; Y=b; int f(int a,int b, int c=0) / X=a; Y=b; Z=c; static void g() X=10; / private: int X, Y, Z; ;(分数:2.50)A.语句是类 MyClass的构造函数定义B.语句和语句实现类成员函数的重载C.语句实现对类成员变量 X的更新操作D.语句、和都不正确10.下列关于 C+流的描述中,错误的是_。(分数:2.50)A.cout“
6、A“表达式可输出字符 AB.eof()函数可以检测是否到达文件尾C.对磁盘文件进行流操作时,必须包含头文件 fstreamD.以 ios_base:out模式打开的文件不存在时,将自动建立一个新文件11.若有定义“int a23;”,下列选项中对 a数组元素正确引用的是_。(分数:1.00)A.a2!1B.a23C.a03D.a12!112.语句 cout setprecison (3)3.1415926end1;的输出为 _ 。(分数:2.00)A.3.14B.3.1C.3.142D.3.14113.下列程序的输出结果为_。 #includeiostream.h class TestClas
7、s public: TestClass()val+; static,int val; ; int TestClass: val=0; void main() TestClass csl; coutcsl.val“ “; TestClass cs2; TestClass cs3,cs4; coutcs2.valendl; (分数:1.00)A.03B.13C.14D.2414.下列运算符中,在 C+语言中不能重载的是(分数:1.00)A.*B.=C.:D./15.关于在调用模板函数时实参的使用,下列表述中正确的是(分数:2.00)A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得
8、相同的信息,则都可以省略B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模板实参,任何情况下都不能省略16.有如下程序: #includeiostream.h using namespace std; class Base public: Base()cout“BB“; f(); void f()cout“BF“; ; class Derived:public Base public: Derived()cout“DD“; void f()cout“Df“; ; int m
9、ain()Derived d;return 0; 执行上面的程序将输出_。(分数:1.00)A.BBBfDDB.BBDfDDDfC.DDD.DDBBBf17.如果派生类以 protected方式继承基类,则原基类的 protected成员和 public成员在派生类中的访问属性分别是_。(分数:1.00)A.public和 publicB.public和 protectedC.protected和 publicD.protected和 protected18.下列关于 this指针的描述中,正确的是_。(分数:2.00)A.类的成员函数都有 this指针B.类的友元函数都有 this指针C.任
10、何与类相关的函数都有 this指针D.类的非静态成员函数都有 this指针19.有如下程序: #includeiostream using namespace std; class A public: A()cout“A“; A()cout“A“; ; class B:public A A* p; public: B()cout“B“;p=new A(); B()cout“B“;delete p; ; int main() B obj; return 0; 执行这个程序的输出结果是_。(分数:2.00)A.BAAABAB.ABABAAC.BAABAAD.ABAABA20.已知数组 arr的定义
11、如下: int arr5=1,2,3,4,5; 下列语句中输出结果不是 2的是_。(分数:2.50)A.cout*arr+1endl;B.cout*(arr+1)endl;C.coutarr1endl;D.cout*arrendl;21.下列叙述中错误的是_。(分数:2.50)A.用户定义的函数中可以没有 return语句B.用户定义的函数中可以有多个 return语句,以便可以调用一次返回多个函数值C.用户定义的函数中若没有 return语句,则应当定义函数为 void类型D.函数的 return语句中可以没有表达式22.数据处理的最小单位是_。(分数:1.00)A.数据B.数据元素C.数据
12、项D.数据结构23.有如下函数模板定义: templatetypename T1,typename T2,typename T3 T2 plus(T1 t1,T3 t3)return t1+t3; 则以下调用正确的是_。(分数:1.00)A.plus(3,5L);B.plus(3,5L);C.plusint(3,5L);D.plusint,double(3,5L);24.有如下程序: #includeiostream using namespace std; class Point public: Point(int xx=0,int yy=0):x(xx),y(yy) void SetX(i
13、nt xx)x=xx; void SetY(int yy)y=yy; private: int x,y; ; class Circle:Point public: Circle(int r):radius(r) int GetRadius()return radius; private: void SetRadius(int r)radius=r; int radius; ; int main() Circle c1(5); c1.SetX(1); / c1.SetY(2); / c1.SetRadius(10); / coutc1.GetRadius(); / return 0; 在标注号码
14、的语句行中不存在语法错误的是_。(分数:1.00)A.B.C.D.25.( )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。(分数:2.00)A.模板B类C.对象D.函数26.下面的函数调用为: fun(x+y,3,min(n-1,y)则 fun的实参个数是_。(分数:2.50)A.3B.4C.5D.627.下列工具中为需求分析常用工具的是 _ 。(分数:2.00)A.PADB.PFDC.NSD.DFD28.下列运算符函数中肯定不属于类 FunNumber的成员函数的是(分数:2.00)A.int operator-(FunNumber);B.FunNumber
15、operator-( );C.FunNumber operator-(int);D.int operator-(FunNumber,FunNumber);29.对于类定义 class A public: virtual void funcl() void func2() ; class D:public A public: void funcl()cout “class B rune 1“end1; virtual void func2()cout “class B func 2“end1; ; 下面正确的叙述是 _。(分数:2.00)A.A:func2()和 B:funcl()都是虚函数B.
16、A:func2()和 B:funcl()都不是虚函数C.B:func1()是虚函数,而 A:func2()不是虚函数D.B:func1()不是虚函数,而 A:func2()是虚函数30.要利用 C+流实现输入输出的各种格式控制,必须在程序中包含的头文件是_。(分数:2.50)A.fstreamB.istreamC.cstdlibD.iomanip31.若有如下类定义: classB void fun1() protected: double var1; public: void fun2() ; class D:public B protected: void fun3() ; 己知 obj是
17、类 D的对象,下列句中不违反类成员访问控制权限的是_。(分数:2.00)A.obj.fun1();B.obj.var1;C.obj.fun2();D.obj.fun3();32.下列关于虚函数的说明中,正确的是_。(分数:1.00)A.从虚基类继承的函数都是虚函数B.虚函数不得是静态成员函数C.只能通过指针或引用调用虚函数D.抽象类中的成员函数都是虚函数33.下列选项中不合法的标识符是_。(分数:2.50)A.printB.FORC.aD.-0034.阅读以下程序 #includeiostream.h void main() char line10; cinline; coutlineendl
18、; 如运行时输入“This is an example.CR”,则程序的输出结果是_。(分数:2.50)A.ThisB.This isC.This is aD.This is an example35.执行语句“for(int i=0, x=0; !x i+);”时,for 循环的循环次数是_。(分数:1.00)A.1B.5C.6D.无限36.下面程序的运行结果是 #includeiostreamh class base protected: int a; public: base()cout “0“; ; class basel:virtual base public: basel () c
19、out “1“; ; class base2:virtual base public: base2()cout “2“; ; class derived:public basel,public base2 public: derived()cout “3“; ; void main() derived obj; cout end1; (分数:1.00)A.0123B.3120C.0312D.301237.已知在一个类体中包含如下函数原型:VOLUMEOPER ATOR-(VOLUME)const;,下列关于这个函数的叙述中,错误的是_。(分数:1.00)A.这是运算符一的重载运算符函数B.这个
20、函数所重载的运算符是一个一元运算符C.这是一个成员函数D.这个函数不改变类的任何数据成员的值38.在对函数进行原型声明时,下列语法成分中,不需要的是_。(分数:2.00)A.函数返回类型B.函数参数列表C.函数名D.函数体39.关于数据库系统三级模式的说法,下列 _ 是正确的。(分数:2.00)A.外模式、概念模式、内模式都只有一个B.外模式有多个,概念模式和内模式只有一个C.外模式只有一个,概念模式和内模式有多个D.3个模式中,只有概念模式才是真正存在的40.下列运算符中,不能被重载的是_。(分数:1.00)A. B.char myString=“Hello-World!“;C.char m
21、yString11=“Hello-World!“;D.char myString12=“Hello-World!“;解析:解析 对于 B来说,会造成溢出,对于 C和 D来说同样如此,因为“Hello-world!”一个是 12个字符组成,加上空字符一共 13个,所以都会造成溢出,只有 A是将字符串的地址赋给字符型指针。2.下列叙述中正确的是_。(分数:1.00)A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共
22、同决定 解析:解析 循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以 A错误;在循环队列中需要队头指针与队尾指针来共同反映队列中元素的动态变化情况,所以 B与 C错误。3.有下列程序: #include stdio.h void main() char a=4; printf(“%d/n“,a=a1); 程序的运行结果是_。(分数:2.50)A.40B.16C.8 D.4解析:解析 本题考查位操作,将 4转化成二进制为 0100,左移一位后为 1000,转成十进制为 8,所以输出 8。4.有如下函数模板定义: templateclass T T func(T x,T y)retu
23、rn x*x+y*y; 在下列对 func的调用中,错误的是_。(分数:2.00)A.func(3,5);B.func(3.0,5.5);C.func(3,5.5); D.funcint(3,5.5);解析:解析 此题考查的是函数模板的使用。引用模板函数和引用一般函数在语法形式上基本相同。需要注意的是说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中的对应形参。本题 C选项中,编译系统从第一个参数“3”获得信息“int”和从第二个参数获得信息“double”两者矛盾,错误;A、B 选项正确;D 选项中,函数名后的int是模板实参表,编译系统会将
24、 double型的形参“5.5”自动转化成 int类型。5.有如下类定义: class Bag public: Bag(int p, char s=“M“):price(p), size(s) count+; Bag()count-; int GetPrice() return price; int GetPrice() const return price; void SetPrice(int val) const price=val; private: int price; char size; static int count; ; 下列关于类成员的叙述中,正确的是_。(分数:1.00)
25、A.成员函数 GetPrice存在重定义B.构造函数的参数不能设置默认值C.析构函数中不能访问静态数据成员D.成员函数 SetPrice不能定义为常函数 解析:解析 重定义是指派生类的函数屏蔽与其同名的基类函数,成员函数重载是指在同一个类中函数名字相同而参数列表不同,两个成员函数 GetPrice由于 const的修饰,使得它们为重载函数,此处不存在重定义,选项 A错误;构造函数的参数可以设置为默认值,选项 B错误;析构函数可以访问静态数据成员,选项 C错误;成员函数 SetPrice会修改成员变量 price的值,所以不能定义为常函数,选项 D正确,答案为 D选项。6.假定 AB为一个类,则
26、执行 AB x;语句时将自动调用该类的(分数:2.00)A.有参构造函数B.无参构造函数 C.拷贝构造函数D.赋值重载函数解析:解析 当没有显式调用指定形式的构造函数,则系统自动调用无参构造函数,如果没有为类指定此构造函数,则系统自动为其生成一个最简单的无参构造函数。7.下列关系运算中,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是 _ 。(分数:2.00)A.选择B.连接 C.投影D并解析:8.有如下程序段: int i=100; while(int i=10)cout“*“;i-; 运行时输出“*“的个数是_。(分数:2.00)A.0B.100C.10D.无穷 解析:9.下面
27、是类 MyClass的定义,对定义中各语句描述正确的是_。 class MyClass public: void MyClass(int a) X=a; / int f(int a,int b) / X=a; Y=b; int f(int a,int b, int c=0) / X=a; Y=b; Z=c; static void g() X=10; / private: int X, Y, Z; ;(分数:2.50)A.语句是类 MyClass的构造函数定义B.语句和语句实现类成员函数的重载C.语句实现对类成员变量 X的更新操作D.语句、和都不正确 解析:10.下列关于 C+流的描述中,错误
28、的是_。(分数:2.50)A.cout“A“表达式可输出字符 A B.eof()函数可以检测是否到达文件尾C.对磁盘文件进行流操作时,必须包含头文件 fstreamD.以 ios_base:out模式打开的文件不存在时,将自动建立一个新文件解析:解析 cout“A“是输出 A的表达式,与 cin连用。11.若有定义“int a23;”,下列选项中对 a数组元素正确引用的是_。(分数:1.00)A.a2!1B.a23C.a03D.a12!1 解析:解析 数组的下标从 O开始,数组 a23包括元素 a00,a01,a02,a10,a11,a12,只有选项 D正确,12 为假,所以是 0,!为假也是
29、 0,即引用元素 a00,其他选项的引用均是下标越界。12.语句 cout setprecison (3)3.1415926end1;的输出为 _ 。(分数:2.00)A.3.14 B.3.1C.3.142D.3.141解析:13.下列程序的输出结果为_。 #includeiostream.h class TestClass public: TestClass()val+; static,int val; ; int TestClass: val=0; void main() TestClass csl; coutcsl.val“ “; TestClass cs2; TestClass cs3
30、,cs4; coutcs2.valendl; (分数:1.00)A.03B.13C.14 D.24解析:解析 由主函数 main入手,定义 TestClass类的对象 cs1,执行 cs1.va1,其中 va1为静态变量,根据 intTestClass:va1=0;初始化,TestClass 中的 TestClass()val+;构造函数执行后,va1 值为1。主函数中接着定义对象 cs2,cs3,cs4。执行 coutcs2.va1endl;中的 va1值为 4,所以输出为 14。14.下列运算符中,在 C+语言中不能重载的是(分数:1.00)A.*B.=C.: D./解析:解析 不能被重载
31、的运算符还包括:“.”,“.*”,“-*”和“?:”。15.关于在调用模板函数时实参的使用,下列表述中正确的是(分数:2.00)A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模板实参,任何情况下都不能省略 解析:解析 模板函数的实参可以省略,但模板实参的省略并不是必然的,而是有条件的。在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的
32、渠道获得这样的信息:从模板实参表(用和括起来的参数表)或从模板函数实参表(用()括起来的参数表),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干个参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空表也可以不要。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略由此可知只有 D) 选项的说法是正确的。16.有如下程序: #includeiostream.h
33、 using namespace std; class Base public: Base()cout“BB“; f(); void f()cout“BF“; ; class Derived:public Base public: Derived()cout“DD“; void f()cout“Df“; ; int main()Derived d;return 0; 执行上面的程序将输出_。(分数:1.00)A.BBBfDD B.BBDfDDDfC.DDD.DDBBBf解析:解析 本题考查类的继承和派生。派生类执行构造函故的一般次序为:首先调用基类构造函数;然后调用成员对象的构造函数;最后是派
34、生类构造函数中的内容。题目中定义派生类对象 d时,先调用基类 Base的构造函数,输出 BBBf,然后调用派生类 Derived的构造函数,输出 DD。17.如果派生类以 protected方式继承基类,则原基类的 protected成员和 public成员在派生类中的访问属性分别是_。(分数:1.00)A.public和 publicB.public和 protectedC.protected和 publicD.protected和 protected 解析:解析 本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有
35、,所以本题答案为 D。18.下列关于 this指针的描述中,正确的是_。(分数:2.00)A.类的成员函数都有 this指针B.类的友元函数都有 this指针C.任何与类相关的函数都有 this指针D.类的非静态成员函数都有 this指针 解析:解析 this 是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针可以知道自己属于哪一个对象。它隐藏于每个类的非静态成员函数中。19.有如下程序: #includeiostream using namespace std; class A public: A()cout“A“; A()cout“A“; ; class B:public
36、A A* p; public: B()cout“B“;p=new A(); B()cout“B“;delete p; ; int main() B obj; return 0; 执行这个程序的输出结果是_。(分数:2.00)A.BAAABAB.ABABAA C.BAABAAD.ABAABA解析:解析 此题考查的是派生类对象的构造与析构。建立派生类对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被定义时声明的顺序(自左向右)-执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序-执行派生类的构造函数。所以本题在建立派生类 B的对象 obj是会先调用基类 A的构
37、造函数,然后调用自身的构造函数。注意:B 类中定义的成员 p是 A类的指针而不是一个对象,故在调用自身构造函数前不需要构造。而在 B类构造函数中使用 new操作、符动态地构造了一个 A类的对象,所以整个构造结果是输出:ABA。 派生类对象的析构与构造严格相反,即先析构自身,然后析构自身所包含的成员对象,最后调用基类的析构函数。故本题中当 main()函数返回时,析构 B类的对象 obj:首先调用B(),接着再调用A()因为在B()函数中释放了动态创建的 A类对象,故整个析构所输出的结果是BAA。所以这个程序输出结果为 ABABAA20.已知数组 arr的定义如下: int arr5=1,2,3
38、,4,5; 下列语句中输出结果不是 2的是_。(分数:2.50)A.cout*arr+1endl;B.cout*(arr+1)endl;C.coutarr1endl;D.cout*arrendl; 解析:解析 一维数组名代表着首元素的地址,选项 D输出的是首元素的值,为 1。21.下列叙述中错误的是_。(分数:2.50)A.用户定义的函数中可以没有 return语句B.用户定义的函数中可以有多个 return语句,以便可以调用一次返回多个函数值 C.用户定义的函数中若没有 return语句,则应当定义函数为 void类型D.函数的 return语句中可以没有表达式解析:解析 本题考查 retu
39、rn语句,return 语句有以下几个特点:用户定义的函数中可以没有返回语句;一个函数体内可以有多个返回语句,不论执行哪一个,函数都可以结束,回到主函数;但是调用一次只能有一个返回值。为了保证函数不返回任何值,C 语言规定,可以定义无类型函数,其形式为 void函数名(参数表)。当函数中不需要指明返回值时,可以写成 return。22.数据处理的最小单位是_。(分数:1.00)A.数据B.数据元素C.数据项 D.数据结构解析:解析 数据处理的最小单位是数据项。23.有如下函数模板定义: templatetypename T1,typename T2,typename T3 T2 plus(T1
40、 t1,T3 t3)return t1+t3; 则以下调用正确的是_。(分数:1.00)A.plus(3,5L);B.plus(3,5L);C.plusint(3,5L);D.plusint,double(3,5L); 解析:解析 C+中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件的:从模板函数实参表获得的信息有矛盾;需要获得特定类型的返回值,而不管参数的类型如何;虚拟类型参数不出现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模板中虚拟类型参数 T2没有出现在模板函数的形参列表中,所以在调用时不能省略,D
41、选项的调用省略了 T3,这是允许的。24.有如下程序: #includeiostream using namespace std; class Point public: Point(int xx=0,int yy=0):x(xx),y(yy) void SetX(int xx)x=xx; void SetY(int yy)y=yy; private: int x,y; ; class Circle:Point public: Circle(int r):radius(r) int GetRadius()return radius; private: void SetRadius(int r)
42、radius=r; int radius; ; int main() Circle c1(5); c1.SetX(1); / c1.SetY(2); / c1.SetRadius(10); / coutc1.GetRadius(); / return 0; 在标注号码的语句行中不存在语法错误的是_。(分数:1.00)A.B.C.D. 解析:解析 本题考查对象成员的引用,在类外引用对象的数据成员时,只能访问 public成员而不能访问 private成员所以 C选项错误,D 选项正确,派生类公有继承基类,但是不能继承基类的私有成员,所以执行 c1.SetX(1)错误,同理 B选项错误。25.(
43、)是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。(分数:2.00)A.模板 B类C.对象D.函数解析:解析 本题考核模板的概念。模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。26.下面的函数调用为: fun(x+y,3,min(n-1,y)则 fun的实参个数是_。(分数:2.50)A.3 B.4C.5D.6解析:解析 在 C+中,形参列表是由逗号分开的,分别说明函数的各个参数。在 fun()函数中它包括三个形参:x+y,3 和 min(n-1,y);当调用一个函数时,实参与形参一对一匹配,所以实参个数也是 3个。27.下列工具中
44、为需求分析常用工具的是 _ 。(分数:2.00)A.PADB.PFDC.NSD.DFD 解析:解析 需求分析常用的工具有数据流图(DFD)、数据字典(DD)、判定树和判定表。PAD(问题分析图)、PFD(程序流程图)、NS(盒式图)都是详细设计的常用工具,不是需求分析的工具。28.下列运算符函数中肯定不属于类 FunNumber的成员函数的是(分数:2.00)A.int operator-(FunNumber);B.FunNumber operator-( );C.FunNumber operator-(int);D.int operator-(FunNumber,FunNumber); 解析
45、:解析 运算符重载,“-”号是单目运算符,而 D被重载为双目运算符,所以为错误的。29.对于类定义 class A public: virtual void funcl() void func2() ; class D:public A public: void funcl()cout “class B rune 1“end1; virtual void func2()cout “class B func 2“end1; ; 下面正确的叙述是 _。(分数:2.00)A.A:func2()和 B:funcl()都是虚函数B.A:func2()和 B:funcl()都不是虚函数C.B:func1(
46、)是虚函数,而 A:func2()不是虚函数 D.B:func1()不是虚函数,而 A:func2()是虚函数解析:30.要利用 C+流实现输入输出的各种格式控制,必须在程序中包含的头文件是_。(分数:2.50)A.fstreamB.istreamC.cstdlibD.iomanip 解析:解析 C+提供了很多格式控制的操作符,包含在头文件 iomanip中。31.若有如下类定义: classB void fun1() protected: double var1; public: void fun2() ; class D:public B protected: void fun3() ; 己知 obj是类 D的对象,下列句中不违反类成员访问控制权限的是_。(分数:2.00)A.obj.fun1();B.obj.var1;C.obj.fun2(); D.obj.fun3();解析:解析 此题考查的是基类成