1、二级 C+-183 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.下列叙述中正确的是_。(分数:2.50)A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.算法的时间复杂度是指执行算法所需要的计算工作量C.数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关2.在结构化程序设计中,模块划分的原则是_。(分数:2.50)A.各模块应包括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度,模块间具有低耦合度3.下列叙述中正确的是_。(分数:2.50)A.软件测试的主要目
2、的是发现程序中的错误B.软件测试的主要目的是确定程序中错误的位置C.为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作D.软件测试是证明软件没有错误4.下面选项中不属于面向对象程序设计特征的是_。(分数:2.50)A.继承性B.多态性C.类比性D.封装性5.下列对列的叙述正确的是_。(分数:2.50)A.队列属于非线性表B.队列按“先进后出”的原则组织数据C.队列在队尾删除数据D.队列按“先进先出”原则组织数据6.对下列二叉树进行前序遍历的结果为_。 (分数:2.50)A.DYBEAFCZXB.YDEBFZXCAC.ABDYECFXZD.ABCDEFXYZ7.某二叉树中有 n 个
3、度为 2 的结点则该二叉树中的叶子结点数为_。(分数:2.50)A.n+1B.n-1C.2nD.n/28.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是_。(分数:2.50)A井B交C.投影D.笛卡儿乘积9.在 E-R 图中,用来表示实休之间是联系的图形是_。(分数:2.50)A.矩形B.椭圆形C.菱形D.平行四边形10.下列叙述中错误的是_。(分数:2.50)A.在数据库系统中,数据的物理结构必须与逻辑结构一致B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统的基础上建立数据库D.数据库系统需要操作系统的支持11.为了取代 C 中带参数的宏,
4、在 C+中使用_。(分数:2.50)A.重载函数B.内联函数C.递归函数D.友元函数12.下列关于类定义的说法中,正确的是_。(分数:2.50)A.类定义中包括数据成员和函数成员的声明B.类成员的默认访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义13.下列关于派生类构造函数和析构函数的说法中,错误的是_。(分数:2.50)A.派生类的构造函数会隐含调用基类的构造函数B.如果基类中没有缺省构造函数,那么派生类必须定义构造函数C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数14.
5、通过运算符重载,可以改变运算符原有的_。(分数:2.50)A.操作数类型B.操作数个数C.优先级D.结合性15.有如下函数模板: template Tclass TT square(T x) (return x*x;) 基中 T 是_。(分数:2.50)A.函数形参B.函数实参C.模板形参D.模板实参16.使用输入/输出操作符 setw,可以控制_。(分数:2.50)A.输出精度B.输出宽度C.对齐方式D.填充字符17.下列字符串中,不可以用作 C+标识符的是_。(分数:2.50)A.y_2006B._TEST_HC.ReturnD.switch18.字面常量 42、4.2、42L 的数据类型
6、分别是_。(分数:2.50)A.long、double、intB.long、float、intC.int、double、longD.int、float、long19.执行下列语句段后,输出字符“*”的个数是_。 for(int i=50; i1; -i)cout“*“;(分数:2.50)A.48B.49C.50D.5120.有如下程序段: int i=0, j=1; int / r=j;/ int *p=/ *p=/ 基中会产生编译错误的语句是_。(分数:2.50)A.B.C.D.21.有如下函数定义: void func(int a, int b+; 若执行代码段: int x=0, y=1
7、 func(x, y); 则变量 x 和 y 值分别是_。(分数:2.50)A.0 和 1B.1 和 1C.0 和 2D.1 和 222.有如下程序: #includeiostream using namespace std; class A public stakic int a; void init()a=1; A(int a=2) init(); a+; ; int A:; a=0 A obj; int main() coutobj.a; return 0; 运行时输出的结果是_。(分数:2.50)A.0B.1C.2D.323.下列有关继承和派生的叙述中,正确的是_。(分数:2.50)A
8、.派生类不能访问基类的保护成员B.作为虚基类的类不能被实例化C.派生类应当向基类的构造函数传递参数D.虚函数必须在派生类中重新实现24.下列运算符中,不能被重载的是_。(分数:2.50)A.B.templateclassT abs(T x)return x0?-x;x;C.template Tclass Tabs(T x)return x0?-x;x;D.template T abs(T x)return x0?-x;x;26.在语句 cindata;中,cin 是_。(分数:2.50)A.C+的关键字B.类名C.对象名D.函数名27.有如下程序: #include using namespa
9、ce std; class test private: int a; public: test()cout“constructor“ENDL; test(int a)coutaendl; test(const test cout“Copy constructor“endl; test()cout“destructor“endl; ; int main() test A(3) return 0; 运行时输出的结果是_。(分数:2.50)A.3B.constructordestruclorC.copy constructordestructorD.3destruclor28.若有如下类声明: cl
10、ass My Class public: MyClass() cout1; ; 执行下列语句: MyClass a, b2, *p2; 以后,程序的输出结果是_。(分数:2.50)A.11B.111C.1111D.1111129.有如下程序: #includeiostream using namespace std; class Point public: static int number; public: Point()number+; Point()number-; ; imt Point:number=0; void main() Point *ptr; Point A, B; Poi
11、nt *ptr_point=new Point3; ptr=ptr_point; Point C; coutPoint:numberendl; deleteptr; 运行时输出的结果是_。(分数:2.50)A.3B.4C.6D.730.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员,有如下程序,没有使用多态机制。 #includeiostream using namespace std; class Base int a, b; public: Base(int x, int y) a=x; b=y; void show()couta“, “bend
12、l; class Derived:public Base int c, d; public: Derived(int x, int y, int z, int m):Base(x, y)c=z; d=m; void show()coutc“, “dendl; ; int main() Base B1(50, 50), *pb; Derived D1(10, 20, 30, 40); pb= pb-show(); return 0; 运行时输出的结果是_。(分数:2.50)A.10, 20B.30, 40C.20, 30D.50, 5031.有如下程序: #includeiostream usi
13、ng namespace std; class A public; A(int i)x=i; void dispa()coutx=“, “; private: int x; ; class B:public A public; B(int i):A(i+10) x=i; voud dispb() dispa():coutxendl; private: int x; ; int main() B b(2); b.dispb() return 0; 运行时输出的结果是_。(分数:2.50)A.10, 2B.12, 10C.12, 2D.2, 232.虚函数支持多态调用,一个基类的指针可以指向派生类
14、的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数,而非虚函数不支持多态调用。有如下程序: #include using namespace std; class Base public: virtual void f()cout“f0+“; void g() cout“g0+“; ; class Derived:public Base public: void f() cout“f+“; void g() cout“g+“; ; int main() Derived d; Base *p= p-f(); p-g(); return 0; 运行时输出的结果是_。(分数
15、:2.50)A.f+g+B.f0+g+C.f+g0+D.f0+g0+33.下面程序中对一维坐标点类 Point 进行运算符重载: #includeiostream using namespace std; class Point public: Point(int val) x=val; Point return*this; Point operator+(int) Point old=*this, +(*this); return old; int GetX() constreturn x; private: int x; ; int main() Point a(10); cout(+a)
16、.GetX(); couta+.GETX(); return 0; 编译和运行情况是_。(分数:2.50)A.运行时输出 1011B.运行时输出 1111C.运行时输出 1112D.编译有错34.有如下程序: #includeiostream using namespace std; int main() char str100, *p; cout“please input a string:“; cinsir; p=str; for(int i=0; *p!=“/0“; p+, i+); coutiendl; return 0; 运行这个程序时,若输入字符串为 abcdefg abcd 则输
17、出结果是_。(分数:2.50)A.7B.12C.13D.10035.有如下程序: #includeiostream using namespace std; class Sample friend long fun(Sample s); public: Sample(long a)x=a; Private: long x; ; long fun(Sample s) if(s.x2)return 1; return s.x*fun(Sample(s.x-a); int main() int sum=0 for(int i=0; i6; i+) sum+=fun (Sample(i);) cout
18、sum; return 0; 运行时输出的结果是_。(分数:2.50)A.120B.16C.154D.3436.必须用一对大括号括起来的程序段是_。(分数:2.50)A.switch 语句中的 case 标号语句B.if 语句的分支C.循环语句的循环体D.函数的函数体37.以下程序的输出结果是_。 #includeiostream using namespace std; int main() int a=0, i; for(i=1; i5; i+) switch(i) case 0; case 3:a+=2; case 1: case 2:a+=3; default:a+=5; coutae
19、ndl; return 0; (分数:2.50)A.31B.13C.10D.2038.语句 int*p= p=B.int *p; p=k;C.int *p; *p=D.int *p; *p=k;39.有以下程序: #includeiostream #includecstring using namespace std; int main() char p=“abcdefgh“; coutstrlen(strcpy(p, “12345“)endl; return 0; 执行后输出的结果是_。(分数:2.50)A.8B.12C.5D.740.若有定义:int*p;则下列各选项中,不同于表达式*p=
20、*p+1;的是_。(分数:2.50)A.*p+B.+*pC.*p+=1D.+(*p)二级 C+-183 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.下列叙述中正确的是_。(分数:2.50)A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.算法的时间复杂度是指执行算法所需要的计算工作量 C.数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关解析:解析 算法的复杂度主要包括时间复杂度和空间复杂度。通常用时间复杂度和空间复杂度来衡量算法效率,算法的时间复杂度就是执行该算法所需要的计算工作量;算法所执行的基本
21、运算次数与问题的规模有关。而一个算法的空间复杂度,就是执行该算法所需要的内存空间;一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构。2.在结构化程序设计中,模块划分的原则是_。(分数:2.50)A.各模块应包括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度,模块间具有低耦合度 解析:解析 软件设计通常采用结构化设计方法,模块的独立程度是评价设计好坏的重要度量标准。耦合性与内聚性是模块独立性的两个定性标准。内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量;耦合性是模块间相互连接的紧密程度的度量。一般较优秀的软件设计,应尽量做到高内聚、低耦
22、合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。3.下列叙述中正确的是_。(分数:2.50)A.软件测试的主要目的是发现程序中的错误 B.软件测试的主要目的是确定程序中错误的位置C.为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作D.软件测试是证明软件没有错误解析:解析 关于软件测试的目的,Grenford J. Myers 在 The Art of So ftware Testing 一书中给出了深刻的阐述:软件测试是为了发现错误而执行程序的过程。一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例;一个成功的测试是发现了至今尚未发现的错误的测试
23、。整体来说,软件测试的目的就是尽可能多地发现程序中的错误。4.下面选项中不属于面向对象程序设计特征的是_。(分数:2.50)A.继承性B.多态性C.类比性 D.封装性解析:解析 对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。面向对象技术有三个重要特性,即封装性、继承性和多态性。5.下列对列的叙述正确的是_。(分数:2.50)A.队列属于非线性表B.队列按“先进后出”的原则组织数据C.队列在队尾删除数据D.队列按“先进先出”原则组织数据 解析:解析 队列是一种线性表,它允许在一端进行插入,在另一端进行删除。
24、允许插入的一端称为队尾,允许删除的另一端称为队头。它又称为“先进先出”或“后进后出”的线性表,体现了“先来先服务”的原则。6.对下列二叉树进行前序遍历的结果为_。 (分数:2.50)A.DYBEAFCZXB.YDEBFZXCAC.ABDYECFXZ D.ABCDEFXYZ解析:解析 前序遍历首先访问根结点,然后遍历左子树,最后遍历右子树。7.某二叉树中有 n 个度为 2 的结点则该二叉树中的叶子结点数为_。(分数:2.50)A.n+1 B.n-1C.2nD.n/2解析:解析 由二叉树的性质知:在任意一棵二叉树中,度为 0 的结点(即叶子结点)总是比度为 2 的结点多一个。本题中,度为 2 的结
25、点数为 n,故叶子结点数为 n+1 个。8.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是_。(分数:2.50)A井B交 C.投影D.笛卡儿乘积解析:解析 关系的基本运算有两类:一类是传统的集合运算(并、交、差),另一类是专门的关系运算(选择、投影、连接)。集合的并、交、差:设有两个关系为 R 和 S,它们具有相同的结构,R 和 S 的并是由属于 R 和 S,或者同时属于 R 和 S 的所有元组组成的集合,记作 RS;R 和 S 的交是由既属于 R 又属于S 的所有元组组成的集合,记作 RS;R 和 S 的差是由属于 R 但不属于 S 的所有元组组成的集合,记作 R-S。因此,
26、在关系运算中,不改变关系表中的属性个数但能减少元组(关系)个数的只能是集合的交了。9.在 E-R 图中,用来表示实休之间是联系的图形是_。(分数:2.50)A.矩形B.椭圆形C.菱形 D.平行四边形解析:解析 该题目主要考的是 E-R 模型的图示法:在 E-R 图中用矩形表示实体,在矩形内写上该实体的名字,这是实体表示法;用椭圆表示属性,在椭圆形内写上该属性的名称,这是属性表示法;用菱形表示联系,这是联系表示法。10.下列叙述中错误的是_。(分数:2.50)A.在数据库系统中,数据的物理结构必须与逻辑结构一致 B.数据库技术的根本目标是要解决数据的共享问题C.数据库设计是指在已有数据库管理系统
27、的基础上建立数据库D.数据库系统需要操作系统的支持解析:解析 数据库系统(Database System,DBS),数据独立性是它的一个特点。一般分为物理独立性与逻辑独立性两级。物理独立性指数据的物理结构的改变,如存储设备的变换、存取方式的改变不影响数据库的逻辑结构,从而不引起应用程序的变化。逻辑独立性指数据库总体逻辑结构的改变,如修改数据模式、增加新的数据类型、改变数据联系等不需要相应修改应用程序。所以,在数据系统中,数据的物理结构并不一定与逻辑结构一致。11.为了取代 C 中带参数的宏,在 C+中使用_。(分数:2.50)A.重载函数B.内联函数 C.递归函数D.友元函数解析:解析 在 C
28、+中,内联函数是为了取代宏而引进的。12.下列关于类定义的说法中,正确的是_。(分数:2.50)A.类定义中包括数据成员和函数成员的声明 B.类成员的默认访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义解析:解析 类成员的默认权限为私有的,数据成员可以声明为私有、公有和保护的。成员函数可以在类体内定义,此时为内联函数。类定义中包括数据成员和成员函数的声明和定义。13.下列关于派生类构造函数和析构函数的说法中,错误的是_。(分数:2.50)A.派生类的构造函数会隐含调用基类的构造函数B.如果基类中没有缺省构造函数,那么派生类必须定义构造函数C.在建立派生类对象时,先
29、调用基类的构造函数,再调用派生类的构造函数D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 解析:解析 派生类析构函数的调用顺序为:先调用派生类的析构函数再调用基类的析构函数,与派生类构造函数的定义正好相反。14.通过运算符重载,可以改变运算符原有的_。(分数:2.50)A.操作数类型 B.操作数个数C.优先级D.结合性解析:解析 运算符的重载不可以改变运算符的优先级和结合性,也不可以改变操作数个数,即单目运算符重载后还是单目运算符,双目运算符重载后还是双目运算符。15.有如下函数模板: template Tclass TT square(T x) (return x*x;
30、) 基中 T 是_。(分数:2.50)A.函数形参B.函数实参C.模板形参 D.模板实参解析:解析 由函数模板的定义可知,T 为模板形参。16.使用输入/输出操作符 setw,可以控制_。(分数:2.50)A.输出精度B.输出宽度 C.对齐方式D.填充字符解析:解析 setw 函数是用来设置输出宽度的,setprecision 函数是设置输出精度的,setfill 是设置字符填充的。设置对齐方式用 left、right、internal 设置。17.下列字符串中,不可以用作 C+标识符的是_。(分数:2.50)A.y_2006B._TEST_HC.ReturnD.switch 解析:解析 在
31、C+中,标识符只能使用字母、数字、下画线,其中数字不能是首字符,关键字也不能为标识符,标识符是区别大小写的,故答案 D 是正确的。18.字面常量 42、4.2、42L 的数据类型分别是_。(分数:2.50)A.long、double、intB.long、float、intC.int、double、long D.int、float、long解析:解析 C+中默认整数常量为 int 型,默认小数常量为 double 型,也可在整型常量后加 u 或 l(大小写均可),强制其数据类型为 unsigned 和 long 型。19.执行下列语句段后,输出字符“*”的个数是_。 for(int i=50;
32、i1; -i)cout“*“;(分数:2.50)A.48B.49 C.50D.51解析:解析 for 循环语句只要满足表达式二的值,就执行循环体,i 的初值是 50,执行一次循环体就输出一个*,当 i=1 时跳出循环也就是最好一次输出*的 i 值是 2,一共 49 个*。20.有如下程序段: int i=0, j=1; int / r=j;/ int *p=/ *p=/ 基中会产生编译错误的语句是_。(分数:2.50)A. B.C.D.解析:解析 D 项定义了一个引用指向 i,C 项通过引用将 i 的值赋为 j,B 项将 i 的地址赋值给整型指针 p,A 项是错误的,因为引用的赋值并不是把变量
33、的值传递给引用,而是把引用指向变量。21.有如下函数定义: void func(int a, int b+; 若执行代码段: int x=0, y=1 func(x, y); 则变量 x 和 y 值分别是_。(分数:2.50)A.0 和 1B.1 和 1C.0 和 2 D.1 和 2解析:解析 fun 函数的第一个参数是值传递,不会改变实参的值,第二个参数是地址传递将实参的值由自加为 2,故选 C。22.有如下程序: #includeiostream using namespace std; class A public stakic int a; void init()a=1; A(int
34、a=2) init(); a+; ; int A:; a=0 A obj; int main() coutobj.a; return 0; 运行时输出的结果是_。(分数:2.50)A.0B.1 C.2D.3解析:解析 创建全局对象 obj 时调用构造函数 A(int a=2),根据静态数据成员和局部变量的作用范围可知,执行 init()函数时,用的是静态数据成员,赋值为 1;a+时用的是局部变量,即构造函数的参数,此时 a 自加后变为 3,但是这个 a 是局部变量,不能在主函数中输出,故输出的 a 值是静态数据成员。23.下列有关继承和派生的叙述中,正确的是_。(分数:2.50)A.派生类不能
35、访问基类的保护成员B.作为虚基类的类不能被实例化 C.派生类应当向基类的构造函数传递参数D.虚函数必须在派生类中重新实现解析:解析 派生类不能访问基类的私有成员,保护成员是可以访问的。当基类中有无参构造函数或者没有构造函数时(编译器会生成默认构造函数),派生类可以不向基类的构造函数传递参数。虚函数可以不在派生类中重定义。24.下列运算符中,不能被重载的是_。(分数:2.50)A. B.templateclassT abs(T x)return x0?-x;x;C.template Tclass Tabs(T x)return x0?-x;x;D.template T abs(T x)retur
36、n x0?-x;x;解析:解析 函数模板的定义格式是:templatetypename T函数声明;程序中 typcname 是可以用 class 替换的,在模板形参表中常规类型也可以声明模板参数类型。26.在语句 cindata;中,cin 是_。(分数:2.50)A.C+的关键字B.类名C.对象名 D.函数名解析:解析 cin 是输入流类的一个对象。27.有如下程序: #include using namespace std; class test private: int a; public: test()cout“constructor“ENDL; test(int a)coutaen
37、dl; test(const test cout“Copy constructor“endl; test()cout“destructor“endl; ; int main() test A(3) return 0; 运行时输出的结果是_。(分数:2.50)A.3B.constructordestruclorC.copy constructordestructorD.3destruclor 解析:解析 定义对象 A 时,调用含参构造函数,输出 3,并换行。程序结束时调用析构函数输出destructor。28.若有如下类声明: class My Class public: MyClass() c
38、out1; ; 执行下列语句: MyClass a, b2, *p2; 以后,程序的输出结果是_。(分数:2.50)A.11B.111 C.1111D.11111解析:解析 创建对象 a 时,涮用构造函数输出 1,创建对象数组 b 时,两次调用构造函数输出 11,故答案为 B。29.有如下程序: #includeiostream using namespace std; class Point public: static int number; public: Point()number+; Point()number-; ; imt Point:number=0; void main()
39、Point *ptr; Point A, B; Point *ptr_point=new Point3; ptr=ptr_point; Point C; coutPoint:numberendl; deleteptr; 运行时输出的结果是_。(分数:2.50)A.3B.4C.6 D.7解析:解析 静态数据成员 number=0,创建对象 A、B 时,调用两次构造函数,创建指针对象时,不调用构造函数,用指针动态创建对象数组时三次调用构造函数,创建对象 C 时,再调用构造函数,一共调用了 6 次构造函数,每调用一次构造函数加 1,最后 number 的值为 6,然后输出。30.如果不使用多态机制,
40、那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员,有如下程序,没有使用多态机制。 #includeiostream using namespace std; class Base int a, b; public: Base(int x, int y) a=x; b=y; void show()couta“, “bendl; class Derived:public Base int c, d; public: Derived(int x, int y, int z, int m):Base(x, y)c=z; d=m; void show()coutc“, “dendl
41、; ; int main() Base B1(50, 50), *pb; Derived D1(10, 20, 30, 40); pb= pb-show(); return 0; 运行时输出的结果是_。(分数:2.50)A.10, 20 B.30, 40C.20, 30D.50, 50解析:解析 创建基类对象 B1 时,调用构造函数 B1.a=50,B1.b=50。创建指针对象时不调用构造函数。创建派生类对象时调用基类构造函数 B1.a=10,B1.b=20,同时调用派生类构造函数 c=30,d=40。基类的指针指向派生类对象,由于没有使用多态机制,所以基类指针只能访问基类继承成员,故输出显示
42、时,调研那个的是基类的 show 函数。31.有如下程序: #includeiostream using namespace std; class A public; A(int i)x=i; void dispa()coutx=“, “; private: int x; ; class B:public A public; B(int i):A(i+10) x=i; voud dispb() dispa():coutxendl; private: int x; ; int main() B b(2); b.dispb() return 0; 运行时输出的结果是_。(分数:2.50)A.10,
43、 2B.12, 10C.12, 2 D.2, 2解析:解析 创建对象 b 时,先调用基类构造函数 A,使得 A 的私有成员 i=i+10=12,再调用 B 的构造函数使得 B 的私有成员 i=2,执行 b.dispb()时,先调用 dispa 函数输出 A 的私有成员 i,再输出 B 的私有成员 i。32.虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数,而非虚函数不支持多态调用。有如下程序: #include using namespace std; class Base public: virtual void f
44、()cout“f0+“; void g() cout“g0+“; ; class Derived:public Base public: void f() cout“f+“; void g() cout“g+“; ; int main() Derived d; Base *p= p-f(); p-g(); return 0; 运行时输出的结果是_。(分数:2.50)A.f+g+B.f0+g+C.f+g0+ D.f0+g0+解析:解析 根据题意可知基类指针 p 指向派生类对象,调用虚函数时调用的的是指针所指的实际对象的虚函数(即派生类中重定义的虚函数),故输出“f+”,但通过基类指针调用实函数时
45、,调用的是基类的函数而非派生类,输出“g0+“。33.下面程序中对一维坐标点类 Point 进行运算符重载: #includeiostream using namespace std; class Point public: Point(int val) x=val; Point return*this; Point operator+(int) Point old=*this, +(*this); return old; int GetX() constreturn x; private: int x; ; int main() Point a(10); cout(+a).GetX(); c
46、outa+.GETX(); return 0; 编译和运行情况是_。(分数:2.50)A.运行时输出 1011B.运行时输出 1111 C.运行时输出 1112D.编译有错解析:解析 Point int main() char str100, *p; cout“please input a string:“; cinsir; p=str; for(int i=0; *p!=“/0“; p+, i+); coutiendl; return 0; 运行这个程序时,若输入字符串为 abcdefg abcd 则输出结果是_。(分数:2.50)A.7 B.12C.13D.100解析:解析 cin输入字符串时,空格被认为是结束标志。35.有如下程序: #includeiostream using namespace std; class Sample friend long fun(Sample s); public: Sample(long a)x=a; Private: long x; ; lon