1、二级 C+-182 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.软件是指_。(分数:2.50)A.程序B.程序和文档C.算法加数据结构D.程序、数据与相关文档的完整集合2.软件调试的目的是_。(分数:2.50)A.发现错误B.改正错误C.改善软件的性能D.验证软件的正确性3.在面向对象方法中,实现信息隐蔽是依靠_。(分数:2.50)A.对象的继承B.对象的多态C.对象的封装D.对象的分类4.下列叙述中,不符合良好程序设计风格要求的是_。(分数:2.50)A.程序的效率第一,清晰第二B.程序的可读性好C.程序中要有必要的注释D.输入数据
2、前要有提示信息5.下列叙述中正确的是_。(分数:2.50)A.程序执行的效率与数据的存储结构密切相关B.程序执行的效率只取决于程序的控制结构C.程序执行的效率只取决于所处理的数据量D.以上三种说法都不对6.下列叙述中正确的是_。(分数:2.50)A.数据的逻辑结构与存储结构必定是一一对应的B.由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构C.程序设计语言中的数据一般是顺序存储结构,因此,利用数组只能处理线性结构D.以上三种说法都不对7.冒泡排序在最坏情况下的比较次数是_。(分数:2.50)A.n(n+1)/2B.nlog2nC.n(n-1)/2D.n/28.一棵二叉树
3、中共有 70 个叶子结点与 80 个度为 1 的结点,则该二叉树中的总结点数为_。(分数:2.50)A.219B.221C.229D.2319.下列叙述中正确的是_。(分数:2.50)A.数据库系统是一个独立的系统,不需要操作系统的支持B.数据库技术的根本目标是要解决数据的共享问题C.数据库管理系统就是数据库系统D.以上三种说法都不对10.下列叙述中正确的是_。(分数:2.50)A.为了建立一个关系,首先要构造数据的逻辑关系B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项C.一个关系的属性名表称为关系模式D.一个关系可以包括多个二维表11.在函数中,可以用 auto、extern、
4、register 和 static 这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是_。(分数:2.50)A.autoB.externC.registerD.static12.对于一个类定义,下列叙述中错误的是_。(分数:2.50)A.如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B.如果没有定义默认的构造函数,编译器将一定生成一个默认的构造函数C.如果没有定义构造函数,编译器将生成一个默认的构造函数和一个拷贝构造函数D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数13.如果派生类以 protected 方式继承基类,则原丛类的 pr
5、otected 成员和 public 成员在派生类中的访问属性分别是_。(分数:2.50)A.public 和 publicB.public 和 protectedC.protected 和 publicD.protected 和 protected14.下列运算符函数中肯定不属于类 FunNumber 的成员函数的是_。(分数:2.50)A.int operator-(FunNumber);B.FunNumber operator-();C.FunNumber operator-(int);D.int operator-(FunNumber, FunNumber);15.C+中的模板包括_。
6、(分数:2.50)A.对象模板和函数模板B.对象模板和类模板C.函数模板和类模板D.变量模板和对象模板16.如果利用 C+流进行输入/输出,下面的叙述中正确的是_。(分数:2.50)A.只能借助于流对象进行输入/输出B.只能进行格式化输入/输出C.只能借助于 cin 和 cout 进行输入/输出D.只能使用运算符和进行输入/输出17.下列符号中不属于 C+关键字的是_。(分数:2.50)A.friendB.namespaceC.continueD.byte18.下列各组类型声明符中,含义相同的一组是_。(分数:2.50)A.unsigned long int 和 longB.signed sh
7、ort int 和 shortC.unsigned short 和 shortD.short int 和 int19.必须用一对大括号括起来的程序段是_。(分数:2.50)A.switch 语句中的 case 标号语句B.if 语句的分支C.循环语句的循环体D.函数的函数体20.语句 int*p=定义了指针 p,与这个语句等效的语句序列是_。(分数:2.50)A.int *p; p=B.int *p; p=k;C.int *p; *p=D.int *p; *p=k21.关于函数重载,下列叙述中错误的是_。(分数:2.50)A.重载函数的函数名必须相同B.重载函数必须在参数个数或类型上有所不同C
8、.重载函数的返回值类型必须相同D.重载函数的函数体可以有所不同22.有如下头文件: int f1(); static int f2(); class MA public: int f3(); static int f4(); ; 在所描述的函数中,具有隐含的 this 指针的是_。(分数:2.50)Af1Bf2Cf3Df423.派生类的成员函数不能访问基类的_。(分数:2.50)A.公有成员和保护成员B.公有成员C.私有成员D.保护成员24.下列关于运算符重载的描述中,正确的是_。(分数:2.50)A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B.一元运算符只能作为成员函数重
9、载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C+中可以重载所有的运算符25.下列关于类模板的模板参数的叙述中,错误的是_。(分数:2.50)A.模板参数可以作为数据成员的类型B.模板参数可以作为成员函数的返回类型C.模板参数可以作为成员函数的参数类型D.模板参数不能作为成员函数的局部变量的类型26.已知一程序运行后执行的第一个输山操作是_。 coutsetw(10)setfill(“*“)1234; 则此操作的输出结果是(分数:2.50)A.1234B.*1234C.*1234D.1234*27.有如下程序: #includeiostream using namespace st
10、d; class MyClass public: MyClass()+count; MyClass()-count; static int getCount()return count; private: static int count; int MyClass:count=0; int main() MyClass obj; coutobj.getCount(); MyClass *ptr=new MyClass; coutMyClass:getCount(); delete ptr; coutMyClass:getCount(); return 0; 程序的输出结果是_。(分数:2.50
11、)A.121B.232C.221D.12228.有如下程序: #includeiostream using namespace std; class MyClass public: Myclass(int x):val(x) void Print()constcout“const:val=“val“/t“; void Print()cout“val=“val“t“; private: int val; ; int main() const MyClass obj1(10); Myclass obj2(20); obj1.Print(); obj2.Print(); return 0; 程序的输
12、出结果是_。(分数:2.50)A.val=10 const:val=20B.const:val=10 const:val=20C.const:val=10 val=20D.val=10 val=2029.有如下程序: #includeiostream using namespace std; class Part public: Part(int x=0):val(x)coutval; Part()coutval; private: int val; ; class Whole public: Whole(int x, int y, int z=0):p2(x), p1(y), val(z)c
13、outval; Whole()coutval; private: Part p1, p2; int val; ; int main() Whole obj(1, 2, 3); return 0; 程序的输出结果是_。(分数:2.50)A.123321B.213312C.213D.12312330.有如下程序: #includeiostream using namespace std; class Base public: Base(int x=0)(coutx; ; class Derived:public Base public: Derived(int x=0)coutx; private
14、: Base val; ; int main() Derived d(1); return 0; 程序的输出结果是_。(分数:2.50)A.0B.1C.01D.00131.若有如下类定义: class B void fun1() protected: double varl; public: void fun2() ; class D:public B protected: void fun3() ; 已知 obj 是类 D 的对象,下列句中不违反类成员访问控制权限的是_。(分数:2.50)A.obj.fun1();B.obj.varl;C.obj.fun2();D.obj.fun3();32
15、.有如下程序; #includeiostream using namespace std; class Base public: void output()cout1; virtual void Print()cout“B“; ; class Derived:public Base public: void output()cout2; void Print()cout“D“; ; int main() Base *ptr=new Derived; ptr-output(); ptr-Print(); delete ptr; return 0; 程序的输出结果是_。(分数:2.50)A.1BB
16、.1DC.2BD.2D33.下列是重载乘法运算符的函数原型声明,其中错误的是_。(分数:2.50)A.MyClass operator*(double, double);B.MyClass operator*(double, MyClass);C.MyClass operator*(MyClass, double);D.MyClass operator*(MyClass, MyClass);34.如下函数的作用是以双倍行距输出文件: void double_space(ifstream whilc _ _; if(c=“n“)t.put(c); 画线处缺失的部分是_。(分数:2.50)A.ge
17、t(c)与 t.put(c)B.put(c)与 t.get(c)C.get(c)与 f.put(c)D.put(c)与 f.get(c)35.有如下程序; #includeiostream using namespace std; class B public: virtual void show()cout“B“; ; class D:public B public: void show()cout“D“; ; void fun1(B *ptr)ptr-show(); void fun2(B void fun3(B b)b.show(); int main() B b, *p=new D;
18、D d; fun1(p); fun2(b); fun3(d); return 0; 程序的输出结果是_。(分数:2.50)A.BBBB.BBDC.DBBD.DBD36.下列各组类型声明中,含义相同的一组是_。(分数:2.50)A.unsigned long int 和 longB.signed short int 和 shortC.unsigned short 和 shortD.short int 和 int37.下列语句输出字符“*”的个数为_。 int i=100; while(1) i-; if(i=0) break; cout“*“; (分数:2.50)A.98B.99C.100D.1
19、0138.下面程序的输出结果是_。 int x=5; do cout-x; while(!x);(分数:2.50)A.43210B.5C.4D.无任何输出39.要定义一个具有 5 个元素的一维数组 vect,并使其各元素的初值依次为 30, 50, -88, 0 和 0,则下列定义语句中错误的是_。(分数:2.50)A.inl vect=30, 50, -88);B.int vect=30, 50, -88, 0, 0;C.int vect5=30, 50, -88;D.int vect5=30, 50, -88, 0, 0;40.有如下说明: int a10=1, 2, 3, 4, 5, 6
20、, 7, 8, 9, 10, *p=a; 则数值 9 的表达式是_。(分数:2.50)A.*p+9;B.*(p+8);C.*p+=9;D.p+7;二级 C+-182 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.软件是指_。(分数:2.50)A.程序B.程序和文档C.算法加数据结构D.程序、数据与相关文档的完整集合 解析:解析 计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。可见软件由两大部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护和使用等有关的文档。2.软件调试
21、的目的是_。(分数:2.50)A.发现错误B.改正错误 C.改善软件的性能D.验证软件的正确性解析:解析 软件测试的目的是为了发现程序中的错误,而程序调试的任务是诊断和改正程序中的错误,改正以后还需要再测试。3.在面向对象方法中,实现信息隐蔽是依靠_。(分数:2.50)A.对象的继承B.对象的多态C.对象的封装 D.对象的分类解析:解析 对象的继承是指使用已有的类定义作为基础建立新类的定义;多态是指在类中可以定义名称相同的函数,但是这些函数的参数或者返回值的类型不同;封装是指将对象分为内部实现和外部接口两个部分,对象的内部对外是不可见的,从而实现信息隐蔽;分类是指将具有相同属性和操作的对象抽象
22、成类。4.下列叙述中,不符合良好程序设计风格要求的是_。(分数:2.50)A.程序的效率第一,清晰第二 B.程序的可读性好C.程序中要有必要的注释D.输入数据前要有提示信息解析:解析 著名的“清晰第一,效率第二”的论点已经成为当今主导的程序设计风格,所以选项 A 是错误的,其他选项都是良好程序设计风格的要求。5.下列叙述中正确的是_。(分数:2.50)A.程序执行的效率与数据的存储结构密切相关 B.程序执行的效率只取决于程序的控制结构C.程序执行的效率只取决于所处理的数据量D.以上三种说法都不对解析:解析 计算机中的数据进行处理时,数据的存储结构对程序的执行效率有很大的关系,例如,在有序存储的
23、表中查找某个数值比在无序存储的表中查找的效率高很多。6.下列叙述中正确的是_。(分数:2.50)A.数据的逻辑结构与存储结构必定是一一对应的B.由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构C.程序设计语言中的数据一般是顺序存储结构,因此,利用数组只能处理线性结构D.以上三种说法都不对 解析:解析 一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构。数组是数据的逻辑结构,可以用多种存储结构来表示,因此选项 B、C 错误。7.冒泡排序在最坏情况下的比较次数是_。(分数:2.50)A.n(n+1)/2B.nlog2nC.n(n-1)/2 D.n/2解析:解析 如果
24、线性表的长度为 n,则在最坏情况下,冒泡排序需要经过 n/2 遍的从前往后扫描和 n/2遍的从后往前扫描,需要比较次数为 n(n-1)/2。8.一棵二叉树中共有 70 个叶子结点与 80 个度为 1 的结点,则该二叉树中的总结点数为_。(分数:2.50)A.219 B.221C.229D.231解析:解析 由二叉树的性质知:在任意一棵二叉树中,度为 0 的结点(即叶子结点)总是比度为 2 的结点多一个。本题中,度为 0 的结点数为 70,因此度为 2 的结点数为 69,再加上度为 1 的结点 80 个,一共是 219 个结点。9.下列叙述中正确的是_。(分数:2.50)A.数据库系统是一个独立
25、的系统,不需要操作系统的支持B.数据库技术的根本目标是要解决数据的共享问题 C.数据库管理系统就是数据库系统D.以上三种说法都不对解析:解析 数据库系统(DataBase System,DBS),是由数据库(数据)、数据库管理系统(软件)、计算机硬件、操作系统以及数据库管理员组成。作为专门处理数据的系统,数据库技术的主要目的就是解决数据的共享问题。10.下列叙述中正确的是_。(分数:2.50)A.为了建立一个关系,首先要构造数据的逻辑关系 B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项C.一个关系的属性名表称为关系模式D.一个关系可以包括多个二维表解析:解析 元组已经是数据的最小
26、单位,不能再分;关系的框架称为关系模式;关系框架与关系元组一起构成了一个关系,也就是一个关系对应了一张二维表。选项 A 中,在建立关系前,要先构造数据的逻辑关系是正确的。11.在函数中,可以用 auto、extern、register 和 static 这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是_。(分数:2.50)A.auto B.externC.registerD.static解析:解析 在 C+中,如果不指定存储类型的话,则默认为 auto。12.对于一个类定义,下列叙述中错误的是_。(分数:2.50)A.如果没有定义拷贝构造函数,编译器将生成一个拷
27、贝构造函数B.如果没有定义默认的构造函数,编译器将一定生成一个默认的构造函数 C.如果没有定义构造函数,编译器将生成一个默认的构造函数和一个拷贝构造函数D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数解析:解析 每个类都必须有拷贝构造函数,当没有定义拷贝构造函数时,编译器将自动生成一个拷贝构造函数,只有类中没有定义任何构造函数,编译器才自动生成不含参的构造函数。B 是错的。13.如果派生类以 protected 方式继承基类,则原丛类的 protected 成员和 public 成员在派生类中的访问属性分别是_。(分数:2.50)A.public 和 publicB.pub
28、lic 和 protectedC.protected 和 publicD.protected 和 protected 解析:解析 派生类以 protected 方式继承基类后,基类的 public 成员也会变成保护成员的,基类的保护成员还是保护的。14.下列运算符函数中肯定不属于类 FunNumber 的成员函数的是_。(分数:2.50)A.int operator-(FunNumber);B.FunNumber operator-();C.FunNumber operator-(int);D.int operator-(FunNumber, FunNumber); 解析:解析 运算符重载如果
29、作为某个类的成员函数,则第一操作数就是对象本身,并不显式出现在参数列表中,对于单目运算符,参数表是空的,对于双目运算符,参数表中有一个参数。当-作为单目运算符时,函数重载应该无参数。当-作为双目运算符时,参数表中有一个参数。所以 D 是错的。15.C+中的模板包括_。(分数:2.50)A.对象模板和函数模板B.对象模板和类模板C.函数模板和类模板 D.变量模板和对象模板解析:解析 C+语言通过模板提供一种将类型参数化的机制,包括函数模板和类模板。16.如果利用 C+流进行输入/输出,下面的叙述中正确的是_。(分数:2.50)A.只能借助于流对象进行输入/输出 B.只能进行格式化输入/输出C.只
30、能借助于 cin 和 cout 进行输入/输出D.只能使用运算符和进行输入/输出解析:解析 要用 C+流进行输入/输出必须借助于流对象。C+既可以进行格式输入/输出也可以进行无格式输入/输出。流对象除了 cin、cout 外还有 clog、cerr。C+中还可以通过调用成员函数进行输入/输出,例如,cin.getline()进行输入,并不是只能通过“”“”来输入/输出。17.下列符号中不属于 C+关键字的是_。(分数:2.50)A.friendB.namespaceC.continueD.byte 解析:解析 关键字是 C+语言本身预先定义好的一类单词,byte 不属于其中。18.下列各组类型
31、声明符中,含义相同的一组是_。(分数:2.50)A.unsigned long int 和 longB.signed short int 和 short C.unsigned short 和 shortD.short int 和 int解析:解析 当基本类型没有修饰符时,默认为 signed,A、C 是错误的,当用 short 和 long 修饰 int型时,int 可以省略。19.必须用一对大括号括起来的程序段是_。(分数:2.50)A.switch 语句中的 case 标号语句B.if 语句的分支C.循环语句的循环体D.函数的函数体 解析:解析 当 switch 语句中的 case 标号语
32、句、if 语句的分支和循环语句的循环体都可以是独立的一条语句,此时大括弧可以省略,但函数体必须要大括弧括起来,即使函数体为空。20.语句 int*p=定义了指针 p,与这个语句等效的语句序列是_。(分数:2.50)A.int *p; p= B.int *p; p=k;C.int *p; *p=D.int *p; *p=k解析:解析 该语句的意思是先定义一个整型指针,然后把 k 的地址传递给 p,故 A 是正确的。21.关于函数重载,下列叙述中错误的是_。(分数:2.50)A.重载函数的函数名必须相同B.重载函数必须在参数个数或类型上有所不同C.重载函数的返回值类型必须相同 D.重载函数的函数体
33、可以有所不同解析:解析 重载函数的函数名必须相同,而且在参数个数或类型上有所不同,但不能依靠返回值来区分重载函数,重载函数对返回值没有要求。重载函数的函数体也可以不同,从而实现不同的功能。不过尽量使重载函数实现相同的功能。22.有如下头文件: int f1(); static int f2(); class MA public: int f3(); static int f4(); ; 在所描述的函数中,具有隐含的 this 指针的是_。(分数:2.50)Af1Bf2Cf3 Df4解析:解析 this 指针只能存在类的成员函数中使用,静态成员函数没有 this 指针。23.派生类的成员函数不能
34、访问基类的_。(分数:2.50)A.公有成员和保护成员B.公有成员C.私有成员 D.保护成员解析:解析 派生类不能访问基类的私有成员,公有成员和保护成员是可以访问的。24.下列关于运算符重载的描述中,正确的是_。(分数:2.50)A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符 B.一元运算符只能作为成员函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C+中可以重载所有的运算符解析:解析 “.”、“:”、“.*”、“-”、“?:”五个运算符是不可以被重载。D 是错误的。某些一元运算符是可以作为非成员函数重载,例如,负运算符“-”。二元运算符重载为非成员函数时,参
35、数表中有两个参数。25.下列关于类模板的模板参数的叙述中,错误的是_。(分数:2.50)A.模板参数可以作为数据成员的类型B.模板参数可以作为成员函数的返回类型C.模板参数可以作为成员函数的参数类型D.模板参数不能作为成员函数的局部变量的类型 解析:解析 类模板的模板形参表声明中声明的虚拟类型参数可以作为数据成员的类型、成员函数的返回值类型、成员函数形参的类型和成员函数体内的变量的类型。故 D 是不对的。26.已知一程序运行后执行的第一个输山操作是_。 coutsetw(10)setfill(“*“)1234; 则此操作的输出结果是(分数:2.50)A.1234B.*1234 C.*1234D
36、.1234*解析:解析 setw(10)设置输出宽度为 10,setfill(*)设置填充字符为*,当实际长度小于设定宽度时,数据其余部分用“*”填充,默认的对齐方式是右对齐。故 B 答案是正确的。27.有如下程序: #includeiostream using namespace std; class MyClass public: MyClass()+count; MyClass()-count; static int getCount()return count; private: static int count; int MyClass:count=0; int main() MyC
37、lass obj; coutobj.getCount(); MyClass *ptr=new MyClass; coutMyClass:getCount(); delete ptr; coutMyClass:getCount(); return 0; 程序的输出结果是_。(分数:2.50)A.121 B.232C.221D.122解析:解析 静态成员变量 count 初值为 0,定义对象 obj 时,调用构造函数,count+1,输出 1,动态创建指针对象时调用构造函数,count+1,输出 2,删除指针对象,调用析构函数,count-1,输出 1。故A 是正确的。28.有如下程序: #inc
38、ludeiostream using namespace std; class MyClass public: Myclass(int x):val(x) void Print()constcout“const:val=“val“/t“; void Print()cout“val=“val“t“; private: int val; ; int main() const MyClass obj1(10); Myclass obj2(20); obj1.Print(); obj2.Print(); return 0; 程序的输出结果是_。(分数:2.50)A.val=10 const:val=2
39、0B.const:val=10 const:val=20C.const:val=10 val=20 D.val=10 val=20解析:解析 创建 obj1 对象时,调用构造函数 obj1.val=10,创建 obj2 对象时,调用构造函数obj2.val=20;因为 obj1 是常对象,调用成员函数时调用的是常成员函数,输出为 cosnt:val=10,obj2为一般对象,调用成员函数时,调用另一个成员函数,输出 val=20。答案 C 正确。29.有如下程序: #includeiostream using namespace std; class Part public: Part(int
40、 x=0):val(x)coutval; Part()coutval; private: int val; ; class Whole public: Whole(int x, int y, int z=0):p2(x), p1(y), val(z)coutval; Whole()coutval; private: Part p1, p2; int val; ; int main() Whole obj(1, 2, 3); return 0; 程序的输出结果是_。(分数:2.50)A.123321B.213312 C.213D.123123解析:解析 对成员对象的构造函数的调用顺序与成员的初始
41、化列表给出的顺序无关,而与成员对象在类中说明的顺序有关。因此在创建对象 obj 时依次创建 Part 类对象成员 p1,p2,故依次输出p2.val=2,p1.val=1,接下来执行 Whole 构造函数的函数体,输出 obj.val=3,程序结束调用类的析构函数与调用构造函数的顺序相反,故输出结果为 213312。30.有如下程序: #includeiostream using namespace std; class Base public: Base(int x=0)(coutx; ; class Derived:public Base public: Derived(int x=0)c
42、outx; private: Base val; ; int main() Derived d(1); return 0; 程序的输出结果是_。(分数:2.50)A.0B.1C.01D.001 解析:解析 根据派生类的构造函数的执行顺序,首先执行基类的默认构造函数,输出 0,再执行派生类的构造函数,但是派生类中出现了成员对象,所以应该先执行成员埘象所对应的类的构造函数,输出0,再执行派生类的构造函数,输出 1,输出结果 001。31.若有如下类定义: class B void fun1() protected: double varl; public: void fun2() ; class
43、D:public B protected: void fun3() ; 已知 obj 是类 D 的对象,下列句中不违反类成员访问控制权限的是_。(分数:2.50)A.obj.fun1();B.obj.varl;C.obj.fun2(); D.obj.fun3();解析:解析 如果没有指明访问权限的话,则默认为私有权限。类 D 公有继承类 B 后基类的成员访问权限没有发生变化,派生类不能访问基类的私有成员 fun1(),fun2()为派生类的公有成员,可以直接访问。fun3()被声明为派生类的保护成员,val1 也为派生类的保护成员,而保护成员是不能直接被访问的。32.有如下程序; #inclu
44、deiostream using namespace std; class Base public: void output()cout1; virtual void Print()cout“B“; ; class Derived:public Base public: void output()cout2; void Print()cout“D“; ; int main() Base *ptr=new Derived; ptr-output(); ptr-Print(); delete ptr; return 0; 程序的输出结果是_。(分数:2.50)A.1BB.1D C.2BD.2D解析
45、:解析 根据题意可知基类指针 ptr 指向派生类对象,调用虚函数时执行的是派生类的重定义版本,输出 D,调用实函数时执行的是基类的函数版本,输出 1。33.下列是重载乘法运算符的函数原型声明,其中错误的是_。(分数:2.50)A.MyClass operator*(double, double); B.MyClass operator*(double, MyClass);C.MyClass operator*(MyClass, double);D.MyClass operator*(MyClass, MyClass);解析:解析 运算符重载不能改变当运算符作用于 C+内部列的对象时的含义,运算
46、符函数的参数中至少存在一个用户白定义对象。34.如下函数的作用是以双倍行距输出文件: void double_space(ifstream whilc _ _; if(c=“n“)t.put(c); 画线处缺失的部分是_。(分数:2.50)A.get(c)与 t.put(c) B.put(c)与 t.get(c)C.get(c)与 f.put(c)D.put(c)与 f.get(c)解析:解析 从文件输入字符要用文件输入流类的引用 f 调用输入成员函数 get()。题目的意思是先读入字符,如果不是换行符则将读入的字符输出到文件,要用文件输出流类的引用 f 调用输出成员函数put()。如果读入的是换行符,则两次输出换行符,即双倍行距。35.有如下程序; #includeiostream using namespace std; class B public: virtual void show()cout“B“; ; class D:public B public: void show()cout“D“; ; void fun1(B *ptr)ptr-show(); void fun2(B void fun3(B b)b.show(); int main() B b, *p=new D; D d; fun1(p); fun2(b