ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:22KB ,
资源ID:11145482      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11145482.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c++面向对象课后答案第9章.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c++面向对象课后答案第9章.docx

1、c+面向对象课后答案第9章1.概念填空题 1.1 C+支持两种多态性,分别是 编译时 和 运行时 .1。2在编译时就确定的函数调用称为 静态联编 ,它通过使用 函数重载,模板等 实现。1.3在运行时才确定的函数调用称为 动态联编 ,它通过 虚函数 来实现。1.4虚函数的声明方法是在函数原型前加上关键字 virtual 。在基类中含有虚函数,在派生类中的函数没有显式写出virtual关键字,系统依据以下规则判断派生类的这个函数是否是虚函数:该函数是否和基类的虚函数 同名 ;是否与基类的虚函数 参数个数相同、类型 ;是否与基类的虚函数 相同返回类型 。如果满足上述3个条件,派生类的函数就是 虚函数

2、。并且该函数 覆盖 基类的虚函数.1。5当通过 引用 或 指针 使用虚函数时,C+会在与对象关联的派生类中正确的选择重定义的函数.实现了 运行时 时多态。而通过 对象 使用虚函数时,不能实现运行时时多态。1。6 纯虚函数是一种特别的虚函数,它没有函数的 函数体 部分,也没有为函数的功能提供实现的代码,它的实现版本必须由 派生类 给出,因此纯虚函数不能是 友元函数 。拥有纯虚函数的类就是 抽象类 类,这种类不能 实例化 .如果纯虚函数没有被重载,则派生类将继承此纯虚函数,即该派生类也是 抽象 .1.7 类的构造函数 不可以 (可以/不可以)是虚函数,类的析构函数可以 (可以/不可以)是虚函数。当

3、类中存在动态内存分配时经常将类的 析构函数 函数声明成 虚函数 。2简答题2。1在C+中,能否声明虚构造函数?为什么?能否声明虚析构函数?为什么?2。2 什么是抽象类?抽象类有何作用?可以声明抽象类的对象吗?为什么?2。3多态性和虚函数有何作用?2。4是否使用了虚函数就能实现运行时的多态性?怎样才能实现运行时的多态性?2。5为什么析构函数总是要求说明为虚函数?3选择题3。1在C+中,要实现动态联编,必须使用(D)调用虚函数。A。类名 B。派生类指针 C。对象名 D.基类指针3.2下列函数 中,不能说明为虚函数的是(C)。A.私有成员函数 B.公有成员函数 C.构造函数 D.析构函数3.3在派生

4、类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(A)。A.相同 B.不同 C。相容 D。部分相同3.4当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中(A).A都是虚函数B只有被重新说明时才是虚函数C只有被重新说明为virtual时才是虚函数D都不是虚函数3.5( C)是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。A虚析构函数B虚构造函数C纯虚函数D静态成员函数3.6 以下基类中的成员函数,哪个表示纯虚函数(C)。Avirtual void vf(int);Bvoid vf(int)=0;Cv

5、irtual void vf( )=0;Dvirtual void vf(int) 3.7下列描述中,(D)是抽象类的特性。A可以说明虚函数B可以进行构造函数重载C可以定义友元函数D不能定义其对象3.8类B是类A的公有派生类,类A和类B中都定义了虚函数func( ),p是一个指向类A对象的指针,则pA:func( )将(A)。A调用类A中的函数func( )B调用类B中的函数func( )C根据p所指的对象类型而确定调用类A中或类B中的函数func( )D既调用类A中函数,也调用类B中的函数3.9类定义如下。class Apublic:virtual void func1( ) void fu

6、n2( ) ;class B:public Apublic:void func1( ) cout”class B func1”endl;virtual void func2( ) coutclass B func2”endl;则下面正确的叙述是(A)AA:func2( )和B::func1( )都是虚函数BA::func2( )和B::func1( )都不是虚函数CB:func1( )是虚函数,而A:func2( )不是虚函数DB::func1( )不是虚函数,而A:func2( )是虚函数3。10下列关于虚函数的说明中,正确的是( B)。A从虚基类继承的函数都是虚函数B虚函数不得是静态成员函

7、数C只能通过指针或引用调用虚函数D抽象类中的成员函数都是虚函数4写出下列程序运行结果4。1includeiostreamusing namespace std;class A public:virtual void func( ) cout”func in class A”endl;;class Bpublic:virtual void func( ) cout”func in class B”endl;;class C:public A,public Bpublic:void func( ) coutfunc in class C”endl:;int main( )C c;A& pa=c;B

8、 pb=c;C& pc=c;pa.func( );pb.func( );pc。func( );func in class C func in class C func in class C4。2includeiostreamusing namespace std;class Apublic:virtual A( )cout”A::A( ) called “endl; ;class B:public Achar *buf;public:B(int i) buf=new chari; virtual B( )delete buf;coutincludecstringusing namespace

9、std;class Vehiclepublic:virtual void showinfo()=0;protected: char Name20;class Car:public Vehiclepublic:Car(char *name)strcpy(Name,name);void showinfo()coutNameendl;protected:int Radius;class Truck:public Vehiclepublic:Truck(char *name)strcpy(Name,name);void showinfo()coutNameendl;;class Boat:public

10、 Vehiclepublic:Boat(char *name)strcpy(Name,name);void showinfo()coutshowinfo ();vp=&truck;vp-showinfo ();vp=&boat;vpshowinfo ();return 0;5.2定义一个shape抽象类,派生出Rectangle类和Circle类,计算各派生类对象的面积Area( )。includeiostreamincludecstringusing namespace std;class Shapepublic:virtual void Area()=0;;class Rectangle:

11、public Shapepublic:Rectangle(double w,double h)width=w,height=h;void Area()coutwidthheightendl;protected:double width,height;;class Circle:public Shapepublic:Circle(double r)radius=r;void Area()cout3。1415*radius*radius#includeusing namespace std;class Animalpublic:virtual void Speak()=0;class Cat :p

12、ublic Animalvoid Speak()cout”My name is Cat”Speak();Leopard leopard;pa=&leopard;pa-Speak();return 0;5.4矩形法(rectangle)积分近似计算公式为:x(y0+y1+。yn-1)梯形法(1adder)积分近似计算公式为: y0+2(y1+。yn-1)+yn辛普生法(simpson)积分近似计算公式(n为偶数)为:y0+ yn +4(y1+y3.yn1)+2(y2+y4+yn2)被积函数用派生类引入,定义为纯虚函数。基类(integer)成员数据包括积分上下限b和a,分区数n,步长step=(

13、ba)n,积分值result.定义积分函数integerate()为虚函数,它只显示提示信息。派生的矩形法类(rectangle)重定义integerate(),采用矩形法做积分运算。 派生的梯形法类(1adder)和辛普生法(simpson)类似.试编程,用3种方法对下列被积函数进行定积分计算,并比较积分精度。(1)sin(x),下限为0.0,上限为pir/2。(2)exp(x),下限为0。0,上限为1.0。 (3)4。0/(1+xx),下限为0。0,上限为1.0.解法一#includeiostreamincludecmathusing namespace std;class Integer

14、protected:double result,a,b,step;/Intevalue积分值,a积分下限,b积分上限int n;public:virtual double fun(double x)=0;/被积函数声明为纯虚函数virtual void Integerate()cout这里是积分函数”endl;Integer(double ra=0,double rb=0,int nn=2000)a=ra;b=rb;n=nn;result=0;void Print()cout.precision(15);cout”积分值=”resultendl;;class Rectangle:public

15、Integerpublic:void Integerate()int i;step=(b-a)/n;for(i=0;i=n;i+) result+=fun(a+step*i);result*=step;Rectangle(double ra,double rb,int nn):Integer(ra,rb,nn);class Ladder:public Integerpublic:void Integerate()int i;step=(ba)/n;result=fun(a)+fun(b);for(i=1;in;i+) result+=2*fun(a+stepi);result=step/2;L

16、adder(double ra,double rb,int nn):Integer(ra,rb,nn);class Simpson:public Integerpublic:void Integerate()int i;step=(ba)/n;result=fun(a)+fun(b);for(i=1;in;i+=2) result+=4*fun(a+stepi);for(i=2;iIntegerate();/动态,可以访问派生类定义的被积函数bpPrint();sinS ss(0.0,3.1415926535/2。0,100);bp=&ss;bp-Integerate();/动态,在层次中选b

17、p-Print();expR er(0。0,1.0,100);bp=&er;bpIntegerate();/动态,可以访问派生类定义的被积函数bp-Print();expL el(0.0,1。0,100);bp=⪙bpIntegerate();/动态,可以访问派生类定义的被积函数bp-Print();expS es(0.0,1.0,100);bp=es;bpIntegerate();/动态,在层次中选bp-Print();otherR or(0.0,1.0,100);bp=∨bpIntegerate();/动态,可以访问派生类定义的被积函数bp-Print();otherL ol(

18、0。0,1.0,100);/增加到100000也达不到辛普生法的精度bp=&ol;bp-Integerate();/动态,可以访问派生类定义的被积函数bp-Print();otherS os(0。0,1.0,100);bp=os;bpIntegerate();/动态,在层次中选bpPrint();return 0;解法二/Integer为抽象类,fun为被积函数,其余3个虚函数为积分函数includeiostreamincludecmathusing namespace std;class Integerprotected:double result,a,b,step;/Intevalue积分

19、值,a积分下限,b积分上限int n;public:virtual double fun(double x)=0;/被积函数声明为纯虚函数virtual void Rectangle()=0;virtual void Ladder()=0;virtual void Simpson()=0;Integer(double ra=0,double rb=0,int nn=2000)a=ra;b=rb;n=nn;step=(b-a)/n;result=0;void Print()cout.precision(15);cout”积分值=”resultendl;class SIN:public Integ

20、erpublic:SIN(double ra,double rb,int nn):Integer(ra,rb,nn)double fun(double x)return sin(x);void Rectangle()int i;for(i=0;i=n;i+) result+=fun(a+stepi);result*=step;void Ladder()int i;result=fun(a)+fun(b);for(i=1;in;i+) result+=2*fun(a+step*i);result=step/2;void Simpson()int i;result=fun(a)+fun(b);for(i=1;iRectangle();Inp-Print();InpLadd

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1