您好,欢迎访问三七文档
第1页共7页一、判断题(每题1分,共10分)()1﹒在程序中,变量定义语句可以出现在程序的任何位置。()2﹒说明函数原型时,必须指明每个参数的类型和名字,以及返回值类型。()3﹒说明函数原型时,形参列表中具有缺省值的形参的右边的形参数必须都具有缺省值。()4﹒声明和定义重载函数时,如果函数的形参完全相同,而函数的类型不同,则会引起歧义性错误。()5﹒指针变量可以在定义时初始化,但初始化的值只能是该指针类型所指对象的地址值或NULL。()6﹒用引用传递函数参数,将在函数作用域内直接使用变量或对象。()7﹒基类中被说明为protected的成员,不允许其他的函数访问,但其派生类的成员函数可访问。()8﹒若类B某成员函数定义为另一个类A的友元,则A类的所有成员函数可以直接访问类B的所有成员。()9﹒构造函数和析构函数都可以被重载,其中析构函数还可能被定义为虚函数。()10﹒指向常对象的指针往往用作函数的参数,目的是在保护形参指针所指对象,使它在函数执行过程中不被修改。二、填空题(每空0.5分,共10分)1.对象的封装可以理解为:⑴将有关的和封装在一个对象中,形成一个基本单位,对象之间相互独立,互不干扰。⑵将对象一部分属性和功能设置为,使之受到保护,不允许其它对象访问它们。⑶把它的一部分属性和功能设置为,作为,以便与外界联系,接收外界消息。2.一个类有个析构函数。析构函数不能具有和,但声明为虚函数。3.在类定义中使用关键字static说明的数据成员被称为数据成员。它的特征是不管该类创建了多少个对象,而该数据成员只有一个,被该类的所有对象。4.如果需要在派生类中访问基类的私有成员可以通过以下两种方法实现:⑴在基类中增加将派生类需要访问的私有成员声明为。⑵将需要访问基类私有成员的派生类声明为基类的。5.重载输入运算符时,其运算符函数的返回值类型应当是,第一操作参数类型也应当是,而第二操作参数应是输入类型的。6.在C++中,编译时多态性是通过机制实现的。而运行时多态性是通过机制来实现的。三、选择题(每空1分,共20分)1.在程序中,函数声明语句正确位置是()。第2页共7页A.随便任何位置B.不包含在另一函数中的任何位置C.该函数使用前的任何位置D.该函数使用前的任何位置,但不包含在另一函数中2.返回类型就是函数返回结果值的数据类型。返回类型可以是()。A.除数组和类以外的任意数据类型B.除数组和结构类型以外的任意数据类型C.除数组类型以外的任意数据类型D.除指针和引用类型以外的任意数据类型3.关于引用,下列的说法中错误的是()。A.引用是给被引用的变量取一个别名B.引用主要是用来作函数的形参和函数的返回值C.在声明引用时,要给它另开辟内存单元D.在声明引用时,必须同时使它初始化4.下面关于对象概念的描述中,()是错误的。A.对象就是C语言中的结构变量B.对象代表着正在创建的系统中的一个实体C.对象是一个状态和操作(或方法)的封装体D.对象之间的信息传递是通过消息进行的5.下列有关类和对象的说法中,()是不正确的。A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类和对象的关系与数据类型和变量的关系相似6.引入内联函数的主要目的是()。A.缩短程序代码,少占用内存空间B.既可以保证程序的可读性,又能提高程序的运行效率C.占用内存空间少,执行速度快D.使程序的结构比较清晰7.下列关于重载函数在调用时选择的依据中,()是错误的。A.参数个数B.参数类型C.函数名字D.函数类型8.()不是构造函数的特性。A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数可以指定类型说明9.类的静态成员函数首先是一个成员函数,但它又不属于类的某一个对象。因此静态成函数的调用形式()。A.只能是类名::静态成员函数名([实参表])B.只能是对象名.静态成员函数名([实参表])第3页共7页C.最好是类名::静态成员函数名([实参表]),也可以是对象名.静态成员函数名([实参表])D.以上答案都不对10.类的静态成员函数不属于类的某一个对象,它没有this指针,()。A.因此在静态成员函数的定义中不允许访问类的非静态成员B.但在静态成员函数的定义中允许直接访问类的非静态成员C.但可以通过由参数传递的类对象访问类的非静态成员11.若类X为类Y友元类,且类Y是类Z的友元类,则下面对类X、Y和Z之间的关于友元关系的描述中,()是正确的A.类Y和类Z不是类X的友元类,类X也不是类Z的友元类。B.类Y和类Z不是类X的友元类,而类X是类Z的友元类。C.类Z不是类X的友元类,类Y是类X的友元类,类X不是类Z的友元类。D.以上答案都不对12.下列对重载函数的描述中,()是错误的。A.重载函数中不允许使用默认参数B.确定重载函数调用的编译是根据参数表进行选择的C.不要使用重载函数来描述操作功能毫不相干的函数D.构造函数重载将会给初始化带来多种方式13.对象的数据成员()在类的声明中赋初值。A.不可以B.可以C.只能D.与定义简单变量相同14.运算符重载实际上是一种函数重载——运算符函数重载。被重载的运算符(),它们的操作数个数()。A.必须是系统预定义运算符B.只能是自定义的运算符C.既可以是自定义的运算符,也可以是系统预定义运算符D.必须不同E.必须相同F.可以相同,也可以不同15.当保护继承时,基类的()在派生类中成为保护成员,不能通过派生类的对象来直接访问该成员。A.任何成员B.公有成员和保护成员C.保护成员和私有成员D.私有成员16.基类的私有成员()。A.在以任何方式继承的派生类中都不能被直接访问B.在以任何方式继承的派生类中都能被直接访问C.只能在以保护方式继承的派生类中被直接访问D.只能在以公有方式继承的派生类中被直接访问17.下列关于多继承二义性的描述中,()是错误。A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性B.解决二义性的最常用的方法是使用类名::对成员名进行限定说明第4页共7页C.基类和派生类中同时出现同名函数,也存在二义性问题D.派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性18.下列关于纯虚函数和抽象类的描述中,()是错误的。A.纯虚函数是一种特殊的虚函数,它没有具体的实现B.抽象类是指具有纯虚函数的类C.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出19.下列关于虚函数的描述中,()是正确的。A.虚函数是一个static类型的成员函数B.虚函数是一个非成员函数C.基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数D.派生类的虚函数与基类的虚函数具有不同的参数个数和类型四、程序理解题(第2小题10分,第1,3,4,5小题各6分,共34分)1.假定要求下面程序的输出结果为“11/15”,其主函数中存在着三行语句错误,请指出错误语句行的行号并改正错误行。#includeiostream.hclassFranction{//定义分数类intnume;//定义分子intdeno;//定义分母public://把*this化简为最简分数,具体定义在另外文件中实现voidFranSimp();//返回两个分数*this和x之和,具体定义在另外文件中实现FranctionFranAdd(constFranction&x);//置分数的分子和分母分别0和1voidInitFranction(){nume=0;deno=1;}//置分数的分子和分母分别n和dvoidInitFranction(intn,intd){nume=n;deno=d;}//输出一个分数voidFranOutput(){coutnume'/'denoendl;}};voidmain()//1行{//2行Franctiona,b,c;//3行a.InitFranction(6,15);//4行b.InitFranction(1);//5行c.InitFranction();//6行c=FranAdd(a,b);//7行第5页共7页coutc.nume’/’c.denoendl;//8行}//9行2.下面的程序在编译链接时,程序的第21行main函数中B.Print();处出现了编译错误。在不修改main函数代码的前提下,需要对Point类的定义和实现代码进行三处修改,使程序能正确编译、链接和运行。(1)请写出三处需要修改的代码的行号及修改后的正确代码。(6分)(2)请写出执行修改后程序所显示的结果。(4分)#includeiostream.h//1classPoint//2{//3public://4Point(intx=0,inty=0){X=x;Y=y;C=0;}//5voidPrint();//6private://7intX,Y;//8intC;//9};//10voidPoint::Print()//11{//12coutXYendl;//13C=C+1;//14}//15main()//16{//17PointA;//18constPointB(10,10);//19A.Print();//20B.Print();//21return0;//22}//233.读懂程序,写出结果。#includeiostream.hclassDate{public:Date(inty=2009,intm=1,intd=1){Year=y;Month=m;Day=d;}voidPrintDate(){coutYear/Month/Dayendl;}protected:intYear,Month,Day;};classTime{第6页共7页public:Time(inth=5,intm=30,ints=0){Houre=h;Minutes=m;Seconds=s;}voidPrintTime(){coutHoure:Minutes:Secondsendl;}protected:intHoure,Minutes,Seconds;};classDate_Time:publicDate,publicTime{public:Date_Time(){};Date_Time(inty,intmo,intd,inth=0,intmi=0,ints=0):Date(y,mo,d),Time(h,mi,s){}voidPrintDate_Time(){PrintDate();PrintTime();}};voidmain(){Date_Timea,b(2002,10,1,6,20,0),c(2003,3,8,6,7);a.PrintDate_Time();b.PrintDate_Time();c.PrintDate_Time();}4.完成程序classA{inta;public:A(){a=0;}①{}//定义构造函数,用参数aa初始化数据成员a};main(){②;//定义类A的指针对象p③;//用p指向动态对象并初始化为整数5}5.以下程序的功能是:找出数组中的最小值并输出,请完成程序。#includeiostream.hclasssample{intx;public:voidsetx(intx0){x=x0;}friendintfun(sampleb[],intn){intm=①;for(inti=0;in;i++)if(b[i].xm)m=②;第7页共7页returnm;}};voidmain(){samplea[6];intarr[]={12,6,21,7,10,9};for(inti=0;i6;i++)a[i].setx(arr[i]);coutfun(③)endl;}五、编程题(第1小题16分,第2小题10分,共26分)1.根据下面
本文标题:c++试题B
链接地址:https://www.777doc.com/doc-2904369 .html