C谭浩强总复习题4_第1页
C谭浩强总复习题4_第2页
C谭浩强总复习题4_第3页
C谭浩强总复习题4_第4页
C谭浩强总复习题4_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(完好版)C谭浩强总复习题4(完好版)C谭浩强总复习题4PAGEPAGE20(完好版)C谭浩强总复习题4PAGE习题四

填空题

1、联编是指一个程序模块、调用代码之间互有关系的过程。依据联编的机遇不一样,能够分为静态联编和〔动向联编〕。

2、包含一个或多个纯虚函数的类称为〔抽象类〕。

3、虚函数应当在〔基类〕中申明,且不可以在派生类中从头定义。

4、纯虚函数是〔只有函数申明而没有详细函数功能实现的虚函数〕。

5、在析构函数前面加上重点字〔virtual〕进行说明,称该析构函数为虚析构函数。

6、假如一个基类的析构函数被说明为虚析构函数,那么它的派生类中的〔析构函数〕也是

虚析构函数。7、多态性分为两类:编译时的多态性和〔运转时的多态性〕,编译时的多态性是经过和〔函数〕模板实现的。8、对虚函数的调用有两种方式:〔指针调用〕和〔对象调用〕。9、实现编译时的多态性的体制称为〔静态关系〕,实现运转时的多态性的体制称为〔动态关系〕。10、有一种特别的虚函数,重定义时不要求同名,这类虚函数是〔虚析构函数〕。11、模板能够实现程序设计中的〔代码重用〕,表达了面向对象程序设计的〔重用性〕。12、C++模板能够分为〔函数模板〕和〔类模板〕。13、由函数模板实例化后是〔模板函数〕,由类模板实例化后是〔模板类〕。14、模板的申明使用重点字〔template〕。15、intsum(intn){returnn+n;}longsum(longn){returnn+n;}是一个函数模板的两个实例,那么该函数模板的定义是〔template<typenameT>Tsum(Tn){returnn+n;}〕。选择题1、下边的4个重点字中,〔A〕是用来说明虚函数的。2、实现运转时的多态性要使用〔D〕。3、假如一个类起码有一个纯虚函数,那么该类称为〔C〕。14、以下描绘中,〔D〕是抽象类的特点。能够说明虚函数能够进行结构函数重载能够定义友元不可以说明其对象5、以下对于虚函数的描绘中,〔C〕是正确的。虚函数是一个非成员函数虚函数是一个静态成员函数派生类的虚函数与基类种对应的虚函数拥有同样的参数个数和种类虚函数既能够在函数说明时定义,也能够在函数实现时定义6、以下对于纯虚函数与抽象类的描绘中,〔C〕是错误的。抽象类是指拥有纯虚函数的类纯虚函数是一个特别的虚函数,它没有详细的实现一个基类中说明拥有纯虚函数,该基类的派生类必定不再是抽象类抽象类只好作为基类来用,其纯虚函数的实现由派生类给出7、以下各函数的说明中,〔B〕表示纯虚函数。A.virtualintvf(int);B.voidvf(int)=0;C.virtualvoidvf()=0;D.virtualvoidvf(int){}8、虚函数一定是类的〔D〕。A.友元函数B.结构函数C.析构函数D.成员函数9、以下对于虚函数的描绘中,〔A〕是正确的。虚函数不可以申明为另一个类的友元函数虚函数不可以申明为静态成员函数派生类一定从头定义基类的虚函数假如在重定义虚函数时使用了保留字virtual,那么该重定义函数仍旧是虚函数10、多态调用是指〔C〕。以任何方式调用一个虚函数以任何方式调用一个纯虚函数借助于指向对象的基类指针或引用调用一个虚函数借助于指向对象的基类指针或引用调用一个纯虚函数11、在C++中,要实现动向联编,一定使用〔D〕调用虚函数。类名派生类指针2对象名基类指针12、以下函数中,能够作为虚函数的是〔D〕。一般函数结构函数友元函数析构函数13、在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的种类、参数的次序和函数返回值〔B〕。A.不一样B.同样C.相容D.局部同样14、假定Aclass为抽象类,以下申明〔B〕是正确的。A.Aclassfun(int);B.Aclass*p;C.intfun(Aclass);D.AclassObj;15、下边描绘中,正确的选项是〔D〕。虚函数是没有实现的函数纯虚函数的实现只好在直接派生类中定义抽象类是只有纯虚函数的类抽象类指针能够指向不一样的派生类16、当运转程序时其实是将类模板实例化为一个详细的〔D〕。A.类B.对象C.函数D.模板类17、模板函数的真实代码是在〔C〕时产生的。A.源程序中申明函数时B.源程序中定义函数时C.源程序中调用函数时D.运转履行函数时18、类模板的模板参数〔D〕。A.只可作为数据成员的种类B.只可作为成员的返回值种类C.只可作为成员函数的参数种类D.以上三者皆可19、以下对于模板的表达中,不正确的选项是〔C〕。用模板定义一个对象时不可以省略参数3类模板只好有虚构参数种类类模板的成员函数都是模板函数类模板自己在编译中不会生成任何代码20、假如有以下函数模板的定义:template<classT>Tfunc(Tx,Ty){returnx+y;}那么对函数func调用不正确的选项是〔C〕。A.func(3,5);B.func<>(3,5);C.func(3,2.5);D.func<int>(3,2.5);判断题1、在C++中,要实现动向联编,能够使用基类指针调用虚函数。√2、结构函数能够作为虚函数使用。N3、虚函数是没有实现的函数。N4、在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的种类、参数的次序和函数返回值局部同样。N5、抽象类是只有纯虚函数的类。N6、结构函数能够作为虚函数。N7、纯虚函数是一个特别的虚函数,它没有详细的实现。√8、虚函数的申明需要使用重点字protected。N9、设置虚函数的目的是为了除去二义性。N10、抽象类只好作为基类使用,其纯虚函数的实现由派生类来达成。√剖析题1、#include<iostream.h>classA{public:A(){cout<<endl<<"实例化类A的一个对象。";}virtual~A()4{cout<<endl<<"除去类A的一个对象。";}virtualvoidf(){cout<<endl<<"履行类A的成员函数。";}};classB:publicA{public:B(){cout<<endl<<"实例化类B的一个对象。";}virtual~B(){cout<<endl<<"除去类B的一个对象。";}voidf(){cout<<endl<<"履行类B的成员函数。";}};voidmain(){a=A();b=B();cout<<endl<<"";a.f();b.f();cout<<endl<<"";A*p;5p=&b;p->f();cout<<endl<<"";}2、#include<iostream.h>classshape{public:shape(){};virtual~shape(){cout<<"Exectingshapedtor"<<endl;}};classCircle:publicshape{public:Circle(){};~Circle(){cout<<"ExectingCircledtor"<<endl;}};voidmain(){shape*pShape=newCircle;deletepShape;}3、#include<iostream>usingnamespacestd;classBase6{private:intx;public:Base(inta=0){x=a;}virtualvoidfun(){cout<<"Basefun"<<endl;}virtual~Base(){cout<<"~Base"<<endl;}};classDerived:publicBase{private:inty;public:Derived(inta=0,intb=0):Base(a){y=b;}voidfun(){cout<<"Derivedfun"<<endl;}~Derived(){cout<<"~Derived"<<endl;}};voidGFun(Base*p){p->fun();}intmain(){Derived*p=newDerived;GFun(p);deletep;return0;}4、#include<iostream.h>classBase{public:virtualintfunc(){return10;}};classDerived:publicBase{public:intfunc(){return80;}};7voidmain(){Derivedd;Base&b=d;cout<<b.func()<<endl;cout<<b.Base::func()<<endl;}5、#include<iostream.h>classbase{public:virtualvoidwho(){cout<<"baseclass1"<<endl;}};classderive1:publicbase{public:voidwho(){cout<<"derive1class2"<<endl;}};classderive2:publicbase{public:voidwho(){cout<<"derive2class3"<<endl;}};voidmain(){baseobj1,*p;derive1obj2;derive2obj3;p=&obj1;p->who();p=&obj2;8p->who();p=&obj3;p->who();obj2.who();obj3.who();}6、#include<iostream>#include<cstring>usingnamespacestd;classBase{charbase_name[20];public:Base(){strcpy(base_name,"BASE");}virtualchar*my_name(){returnbase_name;}char*class_name(){returnbase_name;}};classDerived:publicBase{charderived_name[20];public:Derived(){strcpy(derived_name,"DERIVED");}char*my_name(){returnderived_name;}char*class_name(){returnderived_name;}};voidshow_ptr(Base*p){cout<<endl<<p->my_name()<<""<<p->class_name();}voidshow_ref(Base&r){cout<<endl<<r.my_name()<<""<<r.class_name();;}intmain()9{Basebb;Deriveddd;cout<<endl;show_ptr(&bb);cout<<"<==应显示'ABCDEFG'";show_ptr(&dd);cout<<"<==应显示'DERIVEDEFG'";cout<<endl;show_ref(bb);cout<<"<==应显示'ABCDEFG'";show_ref(dd);cout<<"<==应显示'DERIVEDEFG'";cout<<endl;cout<<endl<<dd.Base::my_name()<<""<<dd.Base::class_name();cout<<"<==应显示'ABCDEFG'";return0;}7、#include<iostream.h>#include<math.h>constdoublePI=3.14;classCircle{protected:doubler;public:Circle(doubleradius=0):r(radius){}virtualdoubleArea()=0;virtualdoubleVolume()=0;};classSphere:publicCircle{public:Sphere(doubleradius=0):Circle(radius){}doubleArea(){return4*PI*r*r;}doubleVolume(){return4*PI*pow(r,3)/3;}10};classCylinder:publicCircle{doubleh;public:Cylinder(doubleradius=0,doubleheight=0):Circle(radius){h=height;}doubleArea(){return2*PI*r*(r+h);}doubleVolume(){returnPI*r*r*h;}};classCone:publicCircle{doubleh;public:Cone(doubleradius=0,doubleheight=0):Circle(radius){h=height;}doubleArea(){doublel=sqrt(h*h+r*r);returnPI*r*r*(r+l);}doubleVolume(){returnPI*r*r*h/3;}};voidOutput(Circle*b[],intn){for(inti=0;i<n;i++)cout<<b[i]->Area()<<""<<b[i]->Volume()<<endl;}voidmain(){11Spherer1(2);Cylinderr2(2,3);Coner3(2,3);Circle*a[3]={&r1,&r2,&r3};Output(a,3);}8、#include<iostream.h>template<classT>Tmin(Tx,Ty){if(x<y)returnx;elsereturny;}voidmain(){intn1=2,n2=8;doubled1=2.3,d2=5.6;cout<<min(n1,n2)<<"";cout<<min(d1,d2)<<endl;}9、#include<iostream.h>template<typenameT>Ttotal(T*p){sum=0;while(*p)sum+=*p++;returnsum;}12intmain(){intx[]={1,3,5,7,9,0,13,15,17};cout<<total(x);return0;}一、编程题1、生成容器类RQ,供给成员函数calTJ()计算容器的体积,定义calTJ()为纯虚数,生成LFT类表示立方体,数据成员A表示立方体的边长,供给成员函数calTJ()计算立方体的体积;生成长方体类CFT,数据成员A,B,C分别表示长方体的长,宽和高,供给成员函数calTJ()计算长方体的体积,类CFT和类LFT都继承类RQ。2、在一个企业里,主管和职工的月薪资计算方法例定以下:主管的每个月薪资固定为4200元;职工的每个月薪资与加班的时间有关,计算方法是每加班一小时50元,固定薪资为2500元。编程实现每个人的月薪资。要求利用纯虚函数实现。3、编程计算圆形〔Circle〕和正方形〔Square〕的周长和面积。要求定义一个抽象类,此中包含求周长〔per〕和面积〔area〕的纯虚函数,而后在此基类的根基上,派生出圆形类和正方形类,主函数经过基类的指针调用各派生类的函数。4、用函数模板实现求两个整数、两个浮点数和两个字符中的最小值。5、定义一个类模板input,在调用结构函数时,达成的工作包含:提示用户输入;让用户输入数据;假如用户输出数据不在预约范围内,提示从头输入。习题答案一、填空题1、动向联编2、抽象类3、基类4、只有函数申明而没有详细函数功能实现的虚函数。5、virtual6、析构函数7、运转时的多态性,函数8、指针调用,对象调用9、静态联编,动向联编1310、虚析构函数11、代码重用,可重用性12、函数模板,类模板13、模板函数,模板类14、template15、template<typenameT>Tsum(Tn){returnn+n;}二、选择题1、A2、D3、C4、D5、C6、C7、C8、D9、A10、C11、D12、D13、B14、B15、D16、D17、C18、D19、C20、C三、判断题1、√2、×3、×4、×5、×6、×7、√8、×9、×10、√四、剖析题1、实例化类A的一个对象。实例化类A的一个对象。实例化类B的一个对象。履行类A的成员函数。履行类B的成员函数。履行类B的成员函数。除去类B的一个对象。除去类A的一个对象。除去类A的一个对象。2、ExectingCircledtorExectingshapedtor3、Derivedfun~Derived~Base144、80105、baseclass1derive1class2derive2class3derive1class2derive2class36、BASEBASE<==应显示'ABCDEFG'DERIVEDBASE<==应显示'DERIVEDEFG'BASEBASE<==应显示'ABCDEFG'DERIVEDBASE<==应显示'DERIVEDEFG'BASEBASE<==应显示'ABCDEFG'7、8、9、25五、编程题1、#include<iostream.h>classRQ{public:15virtualfloatcalTJ()=0;virtualvoiddisplay()=0;};classLFT:publicRQ{private:floatA;public:LFT(floata){A=a;}floatcalTJ(){returnA*A*A;}voiddisplay(){cout<<"立方体体积为"<<calTJ()<<endl;}};classCFT:publicRQ{private:floatA,B,C;public:CFT(floata,floatb,floatc){A=a;B=b;C=c;}floatcalTJ(){returnA*B*C;}voiddisplay(){cout<<"长方体体积为"<<calTJ()<<endl;}};voidmain(){RQ*p;LFTL1(3);CFTC1(1,2,3);p=&L1;p->display();p=&C1;p->display();}2、#include<iostream.h>16classEmployee{public:virtualdoubleearn()=0;virtualvoidprint()=0;};classManager:publicEmployee{private:doublemsalary;public:Manager(doublems){msalary=ms;}doubleearn(){returnmsalary;}voidprint(){cout<<"主管月薪资为:"<<earn()<<endl;}};classHworker:publicEmployee{private:doublewage;inthours;public:Hworker(doublew,inth){wage=w;hours=h;}doubleearn(){return2500+hours*50;}voidprint(){cout<<"职工加班"<<hours<<"小时薪资为:"<<earn()<<endl;}};voidmain(){Employee*p;Managerm1(4200);Hworkerh1(2500,3);p=&m1;p->print();p=&h1;17p->print();}3、#include"iostream.h"#include"math.h"constdoublePI=3.14;classShape{public:virtualvoidGetPerimeter()=0;virtualvoidGetArea()=0;protected:doubleper;doublearea;};classCircle:pu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论