




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计期末复习题及答案1面向对象程序设计期末复习题及答案1面向对象程序设计期末复习题及答案1xxx公司面向对象程序设计期末复习题及答案1文件编号:文件日期:修订次数:第1.0次更改批准审核制定方案设计,管理制度C++面向对象程序设计复习试题类型1、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。15题,每小题2分,共30分)[主要从作业题目中抽出来]2.填空题。(10题,每小题3分,共30分)3、阅读程序,写出程序运行结果。【也称计算题】(3题,每小题5分,共15分)4、程序编制题【也称综合分析题】。(第1、2题每题8分,第3题9分,共25分)重点复习内容打*号是重点,打▲号是编程题出题范围*基本概念,对象,消息,类。面向对象系统特性,封装性,继承性,多态性。*▲C++类的构成,类与对象,构造与析构,动态存储,类嵌套。静态成员,对象数组,友元。*函数重载。运算符重载。*引用定义与引用参数*基类与派生类的定义。*基类及派生类的访问权(含派生类对基类的访问、通过派生类对象对基类的访问)和初始化。多继承与虚基类。*多态性与虚函数。纯虚函数、抽象类。*▲函数模板。*▲使用类来定义对象并在程序中的应用题型样题填空题1.假定AB为一个类,则执行“ABa[10];”语句时,系统自动调用该类的构造函数的次数为_________。答案:102.可以用p.a的形式访问派生类对象P的基类成员a,其中a是_________。答案:公有继承的公有成员3.能作为重载函数的调用的依据是_________。答案:参数个数、参数类型4.在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流是否结束状态的操作函数名称是_________答案:eof5.函数重载是指_________。答案:两个或两个以上的函数取相同的函数名,但形参的个数或类型不同6.在派生类中重新定义虚函数时必须在_________方面与基类保持一致。答案:参数个数阅读程序例题【计算题】1.分析以下程序的执行结果#include<iostream.h>classSample{intx,y;public:Sample(){x=y=0;}Sample(inta,intb){x=a;y=b;}~Sample(){if(x==y)cout<<“x=y”<<endl;elsecout<<“x!=y”<<endl;}voiddisp(){cout<<“x=”<<x<<“,y”=<<y<<endl;}};voidmain(){Samples1,s2(2,3);s1.disp();s2.disp();}解:x=0,y=0x=2,y=3x!=yx=y2.分析以下程序的执行结果#include<iostream.h>intadd(intx,inty){returnx+y;}intadd(intx,inty,intz){returnx+y+z;}voidmain(){inta=4,b=6,c=10;cout<<add(a,b)<<,<<add(a,b,c)<<endl;}解:10,203.分析以下程序执行结果#include<iostream.h>intadd(intx,inty){returnx+y;}doubleadd(doublex,doubley){returnx+y;}voidmain(){inta=4,b=6;doublec=2.6,d=7.4;cout<<add(a,b)<<","<<add(c,d)<<endl;}解:10,104.分析以下程序执行的结果#include<iostream.h>classSample{intx,y;public:Sample(){x=y=0;}Sample(inta,intb){x=a;y=b;}voiddisp(){cout<<"x="<<x<<",y="<<y<<endl;}};voidmain(){Samples1,s2(1,2),s3(10,20);Sample*pa[3]={&s1,&s2,&s3};for(inti=0;i<3;i++)pa[i]->disp();}解:x=0,y=0x=1,y=2x=10,y=205.分析以下程序的执行结果:#include<iostream.h>classbase{intn;public:base(){};base(inta){cout<<"constructingbaseclass"<<endl;n=a;cout<<"n="<<n<<endl;}~base(){cout<<"destructingbaseclass"<<endl;}};classsubs:publicbase{intm;public:subs(inta,intb):base(a){cout<<"constructingsubclass"<<endl;m=b;cout<<"m="<<m<<endl;}~subs(){cout<<"destructingsubclass"<<endl;}};voidmain(){subss(1,2);}解:constructingbaseclassn=1constructingsubclassm=2destructingsubclassdestructingbaseclass6.分析以下程序的执行结果:#include<iostream.h>classSample{protected:intx;public:Sample(){x=0;}Sample(intval){x=val;}voidoperator++(){x++;}};classDerived:publicSample{inty;public:Derived():Sample(){y=0;}Derived(intval1,intval2):Sample(val1){y=val2;}voidoperator--(){x--;y--;}voiddisp(){cout<<"x="<<x<<",y="<<y<<endl;}};voidmain(){Derivedd(3,5);d.disp();d++;d.disp();d--;d--;d.disp();}解:x=3,y=5x=4,y=5x=2,y=37分析以下程序执行结果:#include<iostream.h>classA{public:A(char*s){cout<<s<<endl;}~A(){}};classB:publicA{public:B(char*sl,char*s2):A(sl){cout<<s2<<endl;}};classC:publicA{public:C(char*sl,char*s2):A(sl){cout<<s2<<endl;}};classD:publicB,publicC{public:D(char*sl,char*s2,char*s3,char*s4):B(sl,s2),C(sl,s3){cout<<s4<<endl;}};voidmain(){Dd("classA","classB","classC","classD");}解:classAclassBclassAclassCclassD补充例题1.分析以下程序的执行结果#include<iostream.h>template<classT>Tmax(Tx,Ty){return(x>y?x:y);}voidmain(){cout<<max(2,5)<<“,”<<max(3.5,2.8)<<endl;}解答:5,3.52.分析以下程序的执行结果#include<iostream.h>voidmain(){inta[]={10,20,30,40},*pa=a;int*&pb=pa;pb++;cout<<*pa<<endl;}解答:输出为:203.分析以下程序的执行结果#include<iostream.h>template<classT>Tabs(Tx){return(x>0?x:-x);}voidmain(){cout<<abs(-3)<<“,”<<abs(-2.6)<<endl;}解答:输出为:3,2.64.分析以下程序的执行结果#include<iostream.h>classSample{charc1,c2;public:Sample(chara){c2=(c1=a)-32;}voiddisp(){cout<<c1<<“转换为”<<c2<<endl;}};voidmain(){Samplea('a'),b('b');a.disp();b.disp();}解答:a转换为Ab转换为B5.分析以下程序的执行结果#include<iostream.h>voidmain(){inta;int&b=a;//变量引用b=10;cout<<“a=”<<a<<endl;}解答:输出为:a=106.分析以下程序的执行结果#include<iostream.h>classSample{intx;public:Sample(){};Sample(inta){x=a;}Sample(Sample&a){x=a.x+++10;}voiddisp(){cout<<“x=”<<x<<endl;}};voidmain(){Samples1(2),s2(s1);s1.disp();s2.disp();}解答:x=3//++运算的结果x=12//2+107.分析以下程序的执行结果#include<iostream.h>classSample{intx;public:Sample(){};Sample(inta){x=a;}Sample(Sample&a){x=a.x+1;}voiddisp(){cout<<“x=”<<x<<endl;}};voidmain(){Samples1(2),s2(s1);s2.disp();}解答:输出为:x=3。程序编制题例题【综合分析题】例1,写出一个梯形类,操作有求面积和周长分析:由于要求梯形的面积和周长,那就要为梯形提供上底,下底,高,左边长,右边长等属性。因此,梯形类描述为:Classechelon{Inttop,bottom,height,llength,rlength;Public:Echelon(){。。。}//构造函数IntArea(){。。。}//求面积IntPerimeter(){。。。。}//求周长}2.设计一个圆类circle和一个桌子类table,另设计一个圆桌类roundtable,它是从前两个类派生的,要求输出一个圆桌的高度、面积和颜色等数据。解:circle类包含私有数据成员radius和求圆面积的成员函数getarea();table类包含私有数据成员height和返回高度的成员函数getheight()。roundtable类继承所有上述类的数据成员和成员函数,添加了私有数据成员color和相应的成员函数。本题程序如下:#include<iostream.h>#include<string.h>classcircle{doubleradius;public:circle(doubler){radius=r;}doublegetarea(){returnradius*radius*3.14;}};classtable{doubleheight;public:table(doubleh){height=h;}doublegetheight(){returnheight;}};classroundtable:publictable,publiccircle{char*color;public:roundtable(doubleh,doubler,charc[]):circle(r),table(h){color=newchar[strlen(c)+1];strcpy(color,c);}char*getcolor(){returncolor;}};voidmain(){roundtablert(0.8,1.2,黑色);cout<<圆桌属性数据:<<endl;cout<<高度:<<rt.getheight()<<米<<endl;cout<<面积:<<rt.getarea()<<平方米<<endl;cout<<颜色:<<rt.getcolor()<<endl;}3.编写程序,定义一个类test,其成员数据及函数要求如下:(1)私有数据成员intdata(2)构造函数两个test()及test(intd),前者将(1)中的数据成员data值设为0;后者将(1)中的数据成员data设定为指定值d(3)成员函数intsetdate()能在键盘读入一个数值,然后将该数值赋给data4.定义一个抽象类tea代表茶叶,它有1个double类型的保护数据成员cost代表种植成本,它还有一个纯虚函数price用来计算售价:doubleprice(void)函数返回值为茶叶的售价。由tea派生出具体类blacktea(红茶),要求如下:(1)类中定义保护成员数据doubleo_cost,表示红茶的经营成本(2)定义构造函数blacktea(doublebtc,doublebto_c),将cost和o_cost,数据成员设定为指定值(3)重载price计算出blacktea的售价。(假设:blacktea售价=(cost+o_cost)*1.2)5.编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。分析:设计一个学生类Stud,除了包括no(学号)、name(姓名)和deg(成绩)数据成员外,有两个静态变量sum和num,分别存放总分和人数,另有两个普通成员函数setdata()和disp(),分别用于给数据成员赋值和输出数据成员的值,另有一个静态成员函数avg(),它用于计算平均分。在main()函数中定义了一个对象数组用于存储输入的学生数据。本题程序如下:#include<stdio.h>#include<string.h>#defineN3classStud{intno;charname[10];intdeg;staticintnum;staticintsum;public:voidsetdata(intn,charna[],intd){no=n;deg=d;strcpy(name,na);sum+=d;num++;}staticdoubleavg(){returnsum/num;}voiddisp(){printf(%-5d%-8s%3d\n,no,name,deg);}};intStud::sum=0;intStud::num=0;voidmain(){Studst[N];inti,n,d;charna[10];for(i=0;i<N;i++){printf(输入学号姓名成绩:);scanf(%d%s%d,&n,na,&d);st[i].setdata(n,na,d);}printf(输出数据\n);printf(学号姓名成绩\n);for(i=0;i<N;i++)st[i].disp();printf(平均分=%g\n\n,Stud::avg());}本程序的执行结果如下:输入学号姓名成绩:1stud189输入学号姓名成绩:2stud278输入学号姓名成绩:3stud84输出数据学号姓名成绩1stud1892stud2783stud384平均分=836.请编写一个程序,以实现在屏幕上显示如下的乘法表。1)12)243)3694)4812165)5101520256)612182430367)71421283542498)8162432404856649)918273645546372817.P463-P464函数模板需要掌握的内容面向对象程序设计的三大特征类和对象类:C++的一种数据类型,使用类的变量则称为对象。C++的类是对象的抽象,是进行封装和数据隐藏的工具,包括:数据成员和成员函数。一个类可以声明多个对象,对象之间代码共享,数据独立。C++类的说明public:可被本类以外的函数访问,是类与外部的接口;private:只能被该类成员函数和友元函数存取和调用;protected:可被本类和本类的派生类的成员函数访问,用于类的继承。成员函数默认时在类中定义的项都是私有的,类成员函数的外部实现:使用对象名引用对象的公有成员函数。方法如下:对象名.成员函数名(参数列表)内联函数的概念;定义内联函数的两种格式1)函数体放在类体内2)函数体放在类体外,使用inline关键字构造函数构造函数的作用是在对象被创建时为对象分配内存空间,对类的数据成员初始化并执行对象的其他内部管理操作。构造函数与类同名构造函数可接收参数但不能有返回值,允许重载。当创建一个类的对象时,系统会自动调用类的构造函数。若未给类定义构造函数,则编译系统将为该类生成一个默认的构造函数,它没有参数,只简单地把对象中的每个实例变量初始化为0。析构函数一、C++语言概述1.了解C++语言的基本符号。2.了解C++语言的词汇(保留字、标识符、常量、运算符、标点符号等)。3.掌握C++程序的基本框架(结构程序设计框架、面向对象程序设计框架等)。4.能够使用VisualC++6.0集成开发环境编辑、编译、运行与调度程序。二、数据类型、表达式和基本运算1.掌握C++数据类型(基本类型,指针类型)及其定义方法。2.了解C++的常量定义(整型常量,字符常量,逻辑常量,实型常量,地址常量,符号常量)。3.掌握变量的定义与使用方法(变量的定义及初始化,全局变量,局部变量)。4.掌握C++运算符的种类、运算优先级和结合性。5.熟练掌握C++表达式类型及求值规则(赋值运算,算术运算符和算术表达式,关系运算符和关系表达式,逻辑运算符和逻辑表达式,条件运算,指针运算,逗号表达式)。三、C++的基本语句1.掌握C++的基本语句,例如赋值语句、表达式语句、复合语句、输入、输出语句和空格语句等。2.用if语句实现分支结构。3.用switch语句实现多分支选择结构。4.用for语句实现循环结构。5.用while语句实现循环结构。6.用do…while语句实现循环结构。7.转向语句(goto,continue,break和return)。8.掌握分支语句和循环语句的各种嵌套使用。四、数组、指针与引用1.掌握一维数组的定义、初始化和访问,了解多维数组的定义、初始化和访问。2.了解字符串与字符数组。3.熟练掌握常用字符串函数(strlen,strcpy,streat,strcmp,strstr等)。4.指针与指针变量的概念,指针与地址运算符,指针与数组。5.引用的基本概念,引用的定义与使用。注意事项:搞清楚指针与地址运算符的区别,指针与引用的区别。五、掌握函数的有关使用1.函数的定义方法和调用方法。2.函数的类型和返回值。3.形式参数与实在参数,参数值的传递。4.变量的作用域、生存周期和存储类别(自动、静态、寄存器,外部)。5.递归函数。6.内联函数。7.带有缺省参数值的函数。注意事项:C++中,函数之间传递参数有传值和传地址两种传递方式。六、熟练掌握类与对象的相关知识1.类的定义方式、数据成员、成员函数及访问权限(public,private,protected)。2.对象和对象指针的定义与使用。3.构造函数与析构函数。4.静态数据成员与静态成员函数的定义与使用方式。5.常数据成员与常成员函数。6.This指针的使用。7.友元函数和友元类。8.对象数组与成员对象。七、掌握类的继承与派生知识1.派生类的定义和访问权限。2.继承基类的数据成员与成员函数。3.基类指针与派生类指针的使用。4.虚基类。八、了解多态性概念1.虚函数机制的要点。2.纯虚函数与抽象基类,虚函数。3.了解运算符重载。九、模板1.掌握简单了解函数模板的定义和使用方式。2.掌握类模板的定义和使用方式,能够写出模板类呈现。十、输入输出流1.掌握C++流的概念。2.能够使用格式控制数据的输入输出。3.掌握文件的I/O操作。详细的复习内容一、C++语言语法基础1、标识符是以字母或下划线开头,由字母、数字、下划线组成的用来标识变量、函数、自定义类型的符号,它不能是C或C++的保留字。2、变量声明与数据类型变量的声明如右:类型名称变量名,变量名=初值;指针变量的声明:类型名称*变量名;数组的声明:类型名称数组名[数组元素个数]={初值,初值,初值……};标准数据类型:boolcharintlongunsignedfloatdouble 标准类型可以强制类型转换例如:floatx;inty=(int)x;自定义数据类型:结构struct联合union类class定义方式:struct自定义类型名 { 成员变量类型成员变量名; ………… };类类型除外3、运算符与表达式运算符:一元运算符:++、--、*、&等 二元运算符:+、-、*、/、+=、||、&&等 三元运算符::
分量运算符:->、. 下标运算符:[] 括弧运算符:() 动态存储运算符:new、delete注意在一个表达式中运算符的优先级。其中尤其要注意++、--、->、.、*、&、=运算符。4、C或C++语句五种语句:表达式语句:例如:y=x*3+4; 空语句: ; 控制语句:例如:break;if(*****)……else 函数调用语句:例如:printf(*****); 复合语句:例如:{x=9+y*5; cout<<x;}除了复合语句以}号结束外,其余的语句全是用;结束。语句可以混合使用:例如if(x!=3){y=7;printf(“%d”,x*y);}其中有复合、控制、表达式、函数调用语句。5、三种程序结构1)顺序结构2)分支结构用ifelseswitch……case……defaultbreak等控制。3)循环结构 用forwhiledo……whilebreakcontinue控制6、函数函数在C或C++中就是子程序函数的声明返回类型函数名(参数类型形式参数名,………) {函数体 return返回值;}其中void型函数无return语句。如果不立即写出函数的实现,只是一个函数原形的声明,可以省略形式参数,如下:返回类型函数名(参数类型,………);函数的参数可以缺省,例如:intf2(intx,inty=8){………}同名函数如果参数的个数或类型不同,编译器能自动识别该调用那一个函数,这叫函数重载,例如:voidf2(){……}与voidf2(intx){……}7、指针指针就是地址,指针声明见变量声明一节,指针指向同类变量:指针名=&变量名;取得指针指向的地址中的内容:*指针名指针可以运算和赋值,但不能直接赋值数字,赋零除外,这时零表示空指针。数组名就是固定指向数组开头的常数指针。8、结构结构的声明见变量声明,用结构类型定义变量:C中struct结构名变量名;C++中结构名变量名;结构成员变量的访问:通过结构变量:结构变量.成员变量 通过结构指针:指针名->成员变量在C++中结构是类的一种特例,也可以有成员函数,但它与类不同,它的成员缺省时是公有的。二、面向对象的程序设计1、类与对象的概念类是一种自定义类型,是对一类对象的抽象,是对象的模板。对象是一个实体,是类的实例,对象由类建立,对象封装了数据和对数据操作的函数,有一个边界,从外部对对象私有部分的访问是被禁止的,对对象的操作要通过它对外的公共接口(公有区)进行。同类对象有相同的成员函数,相同的数据成员集合,但名字不同,数据成员的值也不一定相同(即对象的状态不同)。对象的数据成员又叫对象的属性,对象的成员函数又叫对象的方法,调用对象的方法叫向对象发送消息。对象之间靠消息联系。面向对象的程序设计就是向未知对象发送消息的程序设计,面向对象的程序就是一组通信的对象。2、类的声明class类名:[public]基类1名,[public]基类2名,……{ private: 类的私有成员,从对象外部不能访问,它的派生类也不能访问,只能它自己访问。 protected: 类的保护成员,从对象外部不能访问,它的派生类和它自己可以访问。 public: 类的公有成员,对外公开的、可以任意访问的成员。};成员变量的声明:在类的{}中象普通变量一样进行声明,但不能赋初值。成员变量在对象中是这个对象的所有成员函数的全局变量。成员函数的声明:在类的{}中先声明函数的原形,再在类的{}之外:返回类型类名::函数名(参数类型形式参数名,………) {函数体 }3、对象定义与使用直接定义对象:类名对象名(构造函数实际参数);通过定义类指针定义对象:类名*指针名; 指针名=new类名(构造函数实际参数);通过定义类指针定义的对象需要用删除:delete指针名;直接定义对象数组:类名数组名[数组元素个数];在定义对象数组时初始化数组:类名数组名[数组元素个数]={类名(构造参数),……};通过类指针定义数组:指针名=new类名[数组元素个数];通过类指针定义对象数组不能调用带参数的构造函数对数组进行初始化。通过类指针定义的数组的删除:deltet[]指针名;使用对象成员:直接定义的对象:对象名.成员名通过指针定义的对象:指针名->成员名一维对象数组元素的访问:数组名[下标].成员名或(*(数组名+下标)).成员名 指针名[下标].成员名或(*(指针名+下标)).成员名每个对象都有一个指向自己的常数指针,即this指针。在计算机中所有同类对象有不同的数据成员,但是只有共同的一组成员函数,成员函数靠this指针来识别是来自哪一个对象的调用。同类对象可以相互赋值。对象间赋值缺省是对应成员的赋值,成员中有指针时通常需要重载赋值号=。普通类型变量向对象赋值时会自动调用相应的构造函数建立一个隐藏的临时对象,再进行对象间赋值。4、构造与析构函数构造函数是在用类定义对象时对对象进行初始化的函数,在定义对象时自动被调用。构造函数与类同名,无返回类型,可以有参数,可以重载,可以缺省参数。析构函数是在对象撤消时自动被调用的,作用是用来清除对象动态申请的资源,析构函数与类同名,但前加一个~,无参数,不能重载。构造函数和析构函数一般不能显式调用,构造函数在下面三种情况是例外:对象数组初始化,在赋值号右边建立临时隐藏对象供对象赋值用,return返回对象。拷贝构造函数的参数是同类对象或同类对象的引用,缺省的拷贝构造函数是将样板对象的数据成员对应赋值给新建对象。当数据成员中有指针时,一般需要编写自己的拷贝构造函数。5、静态成员静态成员是同类对象的公共成员,静态成员函数没有this指针,不能直接访问类的普通成员,只能访问静态成员,普通成员函数可以访问静态成员,任何一个对象改变了静态成员变量的值,将改变所有对象的该成员。在类外对静态成员变量的初始化:类型类::成员变量=初始值;6、友元友元就是让类外的函数或别的类访问私有区,友元不是该类的成员,它破坏封装。友元有三种:友元函数。是类外的一般函数。声明:friend返回类型函数名(类形式参数,……);友元成员。是其它类的成员函数。声明:friend返回类型其它类名::函数名(类形式参数,……);友元类。别的类。声明:friendclass其它类名;友元可以在类的任何区声明,友元声明是单向的,没有传递性。由于友元没有this指针,所以友元的形式参数是对象或对象的引用。7、类的继承和访问权限派生类继承了基类的成员,可以有公有派生和私有派生。继承关系如下:有的部分被舍弃,反之不能赋值。8、
多继承问题一个类可以有多个基类,如果都是公有继承,在不同继承路径上继承的公共基类,由于在派生类中存在多个副本,会出现访问的二义性问题,要将这些副本合成一个,可以在派生时将这个基类声明为虚基类。9、构造函数和析构函数的调用次序在一个派生类中如果有对象成员,则基类、对象成员和派生类的构造次序如下:先基类后对象成员最后派生类对象自身析构的次序与构造次序相反。构造函数和析构函数的调用次序与构造和析构次序相同。构造函数的实现如下:派生类名::构造函数名(参数表):基类1构造函数(参数),基类1构造函数(参数),…… 对象成员1(构造参数表),对象成员2(构造参数表),…… {派生类对象的构造函数体 }10、流与流类库流运算符:<<、>>流类库:iostream、istream、ostream、ios,ios是istream、ostream的基类,istream和ostream又是iostream的基类,ios是抽象类。使用流类库要在程序前加上:#include“iostream.h”标准输出流:cout是流向屏幕,它是一个ostream类的对象。标准输入流:cin是由键盘流入,它是一个istream类的对象。11、函数重载重载是指一个符号可以有多重意义。函数重载参看前面所述。一般函数、普通成员函数、构造函数可以重载,析构函数不能重载。12、操作符重载对于对象与对象、对象与标准类型变量之间的运算,需要对运算符重载。一般可以有成员函数重载和友元函数重载。函数名:operator运算符(参与运算的参数)要注意++、--、<<、>>运算符的重载,其中<<、>>运算符重载要流类(istream和ostream类)对象或引用作参数和返回值。其中=、()、[]、->只能用成员函数重载。将类类型转换成普通类型与运算符重载类似。普通类型转换成类类型用构造函数实现。13、多态性分为静态的多态性和动态的多态性。静态的多态性用重载实现。动态的多态性是指:同一个消息发给不同对象,对象的反应不同。它是在运行过程中进行连接的,所以由叫动态联编。它的基础是虚函数。14、虚函数与纯虚函数虚函数的声明:virtual返回类型函数名(参数表);当用基类指针指向派生类对象时,通过这个指针调用虚函数将首先调用派生类中的实现,如果派生类中没有写这个函数的实现,则调用基类中的实现。虚函数的虚特性可以传递。如果派生类不写虚函数自己的实现,它又要在它的派生类中使用基类虚函数的虚特性,可以编写一个空的虚函数。纯虚函数的声明:virtual返回类型函数名(参数表)=0;纯虚函数不需要写它的实现,含有纯虚函数的类叫抽象类,不能建立对象,可以作基类和定义指针。在抽象类的派生类中要写出纯虚函数的实现,否则需要再次声明这个函数是虚函数,这样这个派生类也是抽象类。虚函数实现了动态连接,但在构造和析构函数中调用虚函数时是静态连接,即没有虚特性。15、模板函数模板与模板函数,定义、实例化,模板函数的重载。类模板与模板类,定义、实例化,类模板的派生。一、单选题第1题如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是()A、一元运算符B、二元运算符C、选项A)和选项B)都可能D、重载错误答案:D第2题C++类体系中,不能被派生类继承的有()。A、转换函数B、构造函数C、虚函数D、静态成员函数答案:B第3题以下叙述中正确的是()A、构成C++语言程序的基本单位是类B、可以在一个函数中定义另一个函数C、main()函数必须放在其他函数之前D、所有被调用的函数一定要在调用之前进行定义答案:A第4题设inta=10,b=11,c=12;,表达式(a+b)的值为()A、2B、0C、-2D、1答案:B第5题下列关于构造函数说法不正确的是()A、构造函数必须与类同名B、构造函数可以省略不写C、构造函数必须有返回值D、在构造函数中可以对类中的成员进行初始化答案:C第6题设有数组定义:chararray[]=”China";,则数组array所占的空间为()A、4个字节B、5个字节C、6个字节D、7个字节答案:C第7题若已定义:inta[]={0,1,2,3,4,5,6,7,8,9},*P=a,i;其中O≤i≤9,则对a数组元素不正确的引用是()A、a[p-a]B、*(&a[i])C、p[i]D、a[10]答案:D第8题如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是()A、一元运算符B、二元运算符C、选项A)和选项B)都可能D、重载错误答案:D第9题表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是()A、showbase()和eof()B、showpoint()和eof()C、showpoint()和bad()D、showpoint()和good()答案:B第10题下面程序的运行结果为()以下是引用片段:#includevoidmain(){for(inta=0,x=0;!x&&a<=10;a++){a++;}cout<<a;}A、10B、11C、12D、0答案:C第11题以下各选项组中,均是C++语言关键字的组是()A、publicoperatorthisB、shodstringstaticC、itwhile〉=D、privatecoutprintf答案:A第12题在位运算中,操作数每右移一位,其结果相当于()A、操作数乘以2B、操作数除以2C、操作数乘以4D、操作数除以4答案:B第13题若定义intk=7,x=12;,则值为3的表达式是()A、x%=(k%=5)B、x%=(k-k%5)C、x%=k-k%5D、(x%=k)-(k%=5)答案:D第14题一个类的友元函数能够访问该类的()A、私有成员B、保护成员C、公有成员D、所有成员答案:D第15题设有数组定义:chararray[]=”China";,则数组array所占的空间为()A、4个字节B、5个字节C、6个字节D、7个字节答案:C第16题下面关于数组的描述错误的是()A、在C++语言中数组的名字就是指向该数组第一个元素的指针B、长度为n的数组,下标的范围是0-n-1C、数组的大小必须在编译时确定D、数组只能通过值参数和引用参数两种方式传递给函数答案:D第17题下列关于模板的说法正确的是()A、模板的实参在任何时候都可以省略B、类模板与模板类所指的是同一概念C、类模板的参数必须是虚拟类型的D、类模板中的成员函数全部都是模板函数答案:D第18题下列描述正确的是()A、表示m〉n为true或mn&&mB、switch语句结构中必须有default语句C、if语句结构中必须有else语句D、如果至少有一个操作数为true,则包含“‖”运算符的表达式为true答案:D第19题在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是()A、failB、eofC、badD、good答案:B第20题下列描述中哪个是正确的()。A、私有派生的子类无法访问父类的成员B、类A的私有派生子类的派生类,C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的C、私有派生类不能作为基类派生子类D、私有派生类的所有子孙类将无法继续继承该类的成员答案:B第21题在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是()A、一元成员运算符B、二元成员运算符C、一元友元运算符D、选项B)和选项C)都可能答案:D第22题下列关于构造函数的描述中,错误的是()A、构造函数可以设置默认参数B、构造函数在定义类对象时自动执行C、构造函数可以是内联函数D、构造函数不可以重载答案:D第23题函数fun的返回值是()以下是引用片段:fun(char*a,char*b){intnum=0,n=0;while(*(a+num)!=‘\0’)num++;while(b[n]){*(a+num)=b[n];num++;n++;}returnnum;}A、字符串a的长度B、字符串b的长度C、字符串a和b的长度之差D、字符串a和b的长度之和答案:D第24题下面关于类和对象的描述中,错误的是()A、类就是C语言中的结构体类型,对象就是C语言中的结构体变量B、类和对象之间的关系是抽象和具体的关系C、对象是类的实例,一个对象必须属于一个已知的类D、类是具有共同行为的若干对象的统一描述体答案:A第25题下列描述正确的是()A、表示m>n为true或mn&&mB、switch语句结构中必须有default语句C、if语句结构中必须有else语句D、如果至少有一个操作数为true,则包含“‖”运算符的表达式为true答案:D第26题下列关于模板的说法正确的是()A、模板的实参在任何时候都可以省略B、类模板与模板类所指的是同一概念C、类模板的参数必须是虚拟类型的D、类模板中的成员函数全部都是模板函数答案:D第27题在位运算中,操作数每右移一位,其结果相当于()A、操作数乘以2B、操作数除以2C、操作数乘以4D、操作数除以4答案:B第28题下列程序的运行结果为()以下是引用片段:#includevoidprint(doublea){cout<<++a;}voidprint(inta,intb){cout<<a<<b;}voidmain(){print(1.2);cout<<"";print(3,4);}A、1.234B、2.234C、1.243D、2.243答案:B第29题下列虚基类的声明中正确的是()A、classvirtualB:publicAB、classB:virtualpublicAC、classB:publicAvirtualD、virtualclassB:publicA答案:B第30题以下各选项组中,均是C++语言关键字的组是()A、publicoperatorthisB、shodstringstaticC、itwhile>=D、privatecoutprintf答案:A第31题下面程序的结果为(),以下是引用片段:voidmain(){inti;inta[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i〈3;i++)cout《a[i][2-i];}A、159B、753C、357D、591答案:C第32题C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是()A、面向过程B、面向对象C、安全性D、复用性答案:B第33题下列关于C++语言类的描述中错误的是()A、类用于描述事物的属性和对事物的操作B、类与类之间通过封装而具有明确的独立性C、类与类之间必须是平等的关系,而不能组成层次结构D、类与类之间可以通过一些方法进行通信和联络答案:C第34题下列关于构造函数说法不正确的是()A、构造函数必须与类同名B、构造函数可以省略不写C、构造函数必须有返回值D、在构造函数中可以对类中的成员进行初始化答案:C第35题下面关于类和对象的描述中,错误的是()A、类就是C语言中的结构体类型,对象就是C语言中的结构体变量B、类和对象之间的关系是抽象和具体的关系C、对象是类的实例,一个对象必须属于一个已知的类D、类是具有共同行为的若干对象的统一描述体答案:A第36题有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。则不能把节点b连接到节点a之后的语句是(),以下是引用片段:structnode{chardata;structnode*next;}a,b,*p=&a,*q=&b;A、a.next=qB、p.next=&bC、p->next=&bD、(*p).next=q答案:B第37题以下叙述中正确的是()A、构成C++语言程序的基本单位是类B、可以在一个函数中定义另一个函数C、main()函数必须放在其他函数之前D、所有被调用的函数一定要在调用之前进行定义答案:A第38题下列关于C++语言类的描述中错误的是()A、类用于描述事物的属性和对事物的操作B、类与类之间通过封装而具有明确的独立性C、类与类之间必须是平等的关系,而不能组成层次结构D、类与类之间可以通过一些方法进行通信和联络答案:C第39题在C++语言中,数据封装要解决的问题是()A、数据的规范化B、便于数据转换C、避免数据丢失D、防止不同模块之间数据的非法访问答案:D第40题考虑函数原型voidtest(inta,intb=7,char="*"),下面的函数调用中,属于不合法调用的是()A、test(5)B、test(5,8)C、test(6,"#")D、test(0,0."*")答案:C第41题下面描述中,表达错误的是()A、公有继承时基类中的public成员在派生类中仍是public的B、公有继承是基类中的private成员在派生类中仍是private的C、公有继承时基类中的protected成员在派生类中仍是protected的D、私有继承时基类中的public成员在派生类中是private的答案:B第42题下面程序的运行结果为()以下是引用片段:#includeclassA{public:A(){cout<<"1";}~A(){cout<<"2";}};classB:publicA{public:B(){cout<<"3";}~B(){cout<<"4";}};voidmain(){Bb;}A、1234B、1324C、1342D、3142答案:C第43题for(intx=0,y=0;!x&&y〈=5;y++)语句执行循环的次数是()A、0B、5C、6D、无次数答案:C第44题下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,在划线处应填入的选项是(),以下是引用片段:voidmain(){inti=0,j,k;do{i++;k=316-13*i;}while();j=k/11;cout《"316=13*"《i《"+"《"11*"《j;}A、k/11B、k%11C、k/11==0D、k%11==0答案:B第45题表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是()A、showbase()和eof()B、showpoint()和eof()C、showpoint()和bad()D、showpoint()和good()答案:B二、填空题第1题假定x是一个逻辑量,则x&&true的值为__________。答案:x第2题C++头文件和源程序文件的扩展名分别为______和______。答案:.h.cpp第3题假定x=5,y=6,则表达式x++*++y的值为__________。答案:35第4题假定类AB中有一个公用属性的静态数据成员bb,在类外不通过对象名访问该成员bb的写法为__________。答案:AB::bb第5题字符串”\nThis\’sapen\n\n”的长度为__________。答案:15第6题变量分为全局和局部两种,________变量没有赋初值时,其值是不确定的。答案:局部第7题一个函数的函数体就是一条_________语句。答案:复合第8题变量分为全局和局部两种,________变量没有赋初值时,其值是不确定的。答案:局部第9题假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为__________和__________。答案:33.2第10题对一个类中的数据成员的初始化可以通过构造函数中的______实现,也可以通过构造函数中的_________实现。答案:初始化表函数体第11题行尾使用注释的开始标记符为__________。答案://第12题C++常数0x145对应的十进制值为__________。答案:325第13题假定x=5,y=6,则执行表达式y*=x++计算后,x和y的值分别为__________和__________。答案:630第14题假定x是一个逻辑量,则x||true的值为__________。答案:true(或1)第15题假定一个结构类型定义为“structD{inta;union{intb;doublec;};D*d[2];};”,则该类型的大小为___________字节。答案:20第16题若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的______语句。答案:原型(或声明)第17题signedchar类型的值域范围是________至__________之间的整数。答案:-128+127第18题多行注释的开始标记符和结束标记符分别为__________和__________。答案:/**/第19题使用#include命令可以包含一个头文件,也可以包含一个______文件。答案:程序第20题十进制常数245对应的八进制的C++表示为__________。答案:0365第21题程序中的预处理命令是指以______字符开头的命令。答案:#第22题当使用_______保留字作为函数类型时,该函数不返回任何值。答案:void第23题C++常数0345对应的十进制值为__________。答案:2第24题bool和char类型的数据分别占用_________和________个字节。答案:11第25题假定x是一个逻辑量,则x&&false的值为__________。答案:false(或0)第26题一个完整程序中必须有一个名为________的函数。答案:main第27题float和double类型的数据分别占用_________和________个字节。答案:48第28题假定x和ch分别为int型和char型,则sizeof(x)和sizeof(ch)的值分别为______和______。答案:41第29题一条表达式语句必须以______作为结束符。答案:分号第30题C++语言是在_________语言的基础上发展起来的。答案:C三、计算题第1题分析以下程序的执行结果:#include<iostream.h>classbase{intn;public:base(){};base(inta){cout<<"constructingbaseclass"<<endl;n=a;cout<<"n="<<n<<endl;}~base(){cout<<"destructingbaseclass"<<endl;}};classsubs:publicbase{intm;public:subs(inta,intb):base(a){cout<<"constructingsubclass"<<endl;m=b;cout<<"m="<<m<<endl;}~subs(){cout<<"destructingsubclass"<<endl;}};voidmain(){subss(1,2);}答案:解:constructingbaseclassn=1constructingsubclassm=2destructingsubclassdestructingbaseclass第2题分析以下程序的执行结果#include<iostream.h>template<classt>tmax(tx,ty){return(x>y?x:y);}voidmain(){cout<<max(2,5)<<","<<max(3.5,2.8)<<endl;}答案:解答:5,3.5第3题分析以下程序的执行结果#include<iostream.h>classSample{charc1,c2;public:Sample(chara){c2=(c1=a)-32;}voiddisp(){cout<<c1<<"转换为"<<c2<<endl;}};voidmain(){Samplea('a'),b('b');a.disp();b.disp();}答案:a转换为Ab转换为B第4题分析以下程序的执行结果#include<iostream.h>intadd(intx,inty){returnx+y;}intadd(intx,inty,intz){returnx+y+z;}voidmain(){inta=4,b=6,c=10;cout<<add(a,b)<<","<<add(a,b,c)<<endl;}答案:解:10,20第5题分析以下程序执行结果#include<iostream.h>intadd(intx,inty){returnx+y;}doubleadd(doublex,doubley){returnx+y;}voidmain(){inta=4,b=6;doublec=2.6,d=7.4;cout<<add(a,b)<<","<<add(c,d)<<endl;}答案:解:10,10第6题分析以下程序执行的结果#include<iostream.h>classSample{intx,y;public:Sample(){x=y=0;}Sample(inta,intb){x=a;y=b;}voiddisp(){cout<<"x="<<x<<",y="<<y<<endl;}};voidmain(){Samples1,s2(1,2),s3(10,20);Sample*pa[3]={&s1,&s2,&s3};for(inti=0;i<3;i++)pa[i]->disp();}答案:解:x=0,y=0x=1,y=2x=10,y=20第7题分析以下程序的执行结果:#include<iostream.h>classSample{protected:intx;public:Sample(){x=0;}Sample(intval){x=val;}voidoperator++(){x++;}};classDerived:publicSample{inty;public:Derived():Sample(){y=0;}Derived(intval1,intval2):Sample(val1){y=val2;}voidoperator--(){x--;y--;}voiddisp(){cout<<"x="<<x<<",y="<<y<<endl;}};voidmain(){Derivedd(3,5);d.disp();d++;d.disp();d--;d--;d.disp();}答案:解:x=3,y=5x=4,y=5x=2,y=3第8题分析以下程序的执行结果#include<iostream.h>classSample{intx,y;public:Sample(){x=y=0;}Sample(inta,intb){x=a;y=b;}~Sample(){if(x==y)cout<<“x=y”<<endl;elsecout<<“x!=y”<<endl;}voiddisp(){cout<<“x=”<<x<<“,y”=<<y<<endl;}};voidmain(){Samples1,s2(2,3);s1.disp();s2.disp();}答案:解:x=0,y=0x=2,y=3x!=yx=y第9题分析以下程序的执行结果#include<iostream.h>classSample{intx;public:Sample(){};Sample(inta){x=a;}Sample(Sample&a){x=a.x+++10;}voiddisp(){cout<<"x="<<x<<endl;}};voidmain(){Samples1(2),s2(s1);s1.disp();s2.disp();}答案:x=3//++运算的结果x=12//2+10四、综合分析题第1题编写一个操作有求面积和求周长的长方形类。答案:ClassRectangle{Intwidth,length;Public:Rectangle(){width=length=0;}//构造函数IntArea(){returnwidth*length;}//求面积IntPerimeter(){return(width+length)*2;}//求周长}第2题设计一个圆类circle和一个桌子类table,另设计一个圆桌类roundtable,它是从前两个类派生的,要求输出一个圆桌的高度、面积和颜色等数据。答案:解:circle类包含私有数据成员radius和求圆面积的成员函数getarea();table类包含私有数据成员height和返回高度的成员函数getheight()。roundtable类继承所有上述类的数据成员和成员函数,添加了私有数据成员color和相应的成员函数。本题程序如下:#include<iostream.h>#include<string.h>classcircle{doubleradius;public:circle(doubler){radius=r;}doublegetarea(){returnradius*radius*3.14;}};classtable{doubleheight;public:table(doubleh){height=h;}doublegetheight(){returnheight;}};classroundtable:publictable,publiccircle{char*color;public:roundtable(doubleh,doubler,charc[]):circle(r),table(h){color=newchar[strlen(c)+1];strcpy(color,c);}char*getcolor(){returncolor;}};voidmain(){roundtablert(0.8,1.2,黑色);cout<<圆桌属性数据:<<endl;cout<<高度:<<rt.getheight()<<米<<endl;cout<<面积:<<rt.getarea()<<平方米<<endl;cout<<颜色:<<rt.getcolor()<<endl;}第3题设计一个学生类student,包括姓名和三门课程成绩,利用重载运算符”+“将所有学生的成绩相加放在一个对象中,再对该对象求各门课程的平均分。答案:解:#include<iostream.h>#include<iomanip.h>#include<string.h>classstudent{charname[10];intdeg1,deg2,deg3;public:student(){}student(charna[],intd1,intd2,intd3){strcpy(name,na);deg1=d1;deg2=d2;deg3=d3;}friendstudentoperator+(students1,students2){staticstudentst;st.deg1=s1.deg1+s2.deg1;st.deg2=s1.deg2+s2.deg2;st.deg3=s1.deg3+s2.deg3;returnst;}voiddisp(){cout<<setw(10)<<name<<setw(5)<<deg1<<setw(5)<<deg2<<setw(5)<<deg3<<endl;}friendvoidavg(student&s,intn){cout<<setw(10)<<平均分<<setw(5)<<s.deg1/n<<setw(5)<<s.deg2/n<<setw(5)<<s.deg3/n<<endl;}};第4题写出一个梯形类,操作有求面积和周长答案:分析:由于要求梯形的面积和周长,那就要为梯形提供上底,下底,高,左边长,右边长等属性。因此,梯形类描述为:Classechelon{Inttop,bottom,height,llength,rlength;Public:Echelon(){top=bottom=height=llength=rlength=0;}//构造函数IntArea(){return(top+bottom)*height/2;}//求面积IntPerimeter(){returntop+bottom+llength_rlength;}//求周长}第5题定义一个抽象类tea代表茶叶,它有1个double类型的保护数据成员cost代表种植成本,它还有一个纯虚函数price用来计算售价:doubleprice(void)函数返回值为茶叶的售价。由tea派生出具体类blacktea(红茶),要求如下:(1)类中定义保护成员数据doubleo_cost,表示红茶的经营成本(2)定义构造函数blacktea(d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抵押合同六8篇
- 伸缩门采购合同合同
- 新零售模式下智慧物流配送优化策略
- 洒水车合同5篇
- 商业保密协议书十
- 公司员工保底协议
- 2025年贵港货运资格证培训考试题
- 2025年宁夏货车从业资格证答题软件
- 陶瓷插芯市场分析及竞争策略分析报告
- 珠光材料市场分析及竞争策略分析报告
- 2024-2030年中国税务师事务所行业管理模式及投资前景展望报告版
- 2024年全国高考英语试题及答案-湖南卷
- 部编人教版小学四年级下册道德与法治全册教案及每课教学反思
- 中建吊篮安拆专项施工方案(专家论证版)
- 《汽车维修接待实务》 课件全套 孙丽学习情景1-8 汽车维修服务接待认知 -新能源汽车维修接待
- 2020年矿建监理工作总结
- 兽医学英语词汇【参考】
- 浙江省温州市2024-2025学年高三上学期一模英语试题 含解析
- 建筑施工安全生产包保责任实施方案
- 《时代与变革•版画艺术的魅力》教学设计
- 《民法典》医疗损害责任篇培训课件
评论
0/150
提交评论