2022年C++网络作业答案复习课程 .pdf
《2022年C++网络作业答案复习课程 .pdf》由会员分享,可在线阅读,更多相关《2022年C++网络作业答案复习课程 .pdf(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+网 络 作 业 6 答 案名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 22 页 -作业 4 一、选择题1 下列关于动态联编的描述中,错误的是_。D A)动态联编是以虚函数为基础的 B)动态联编是在运行时确定所调用的函数代码的 C)动态联编调用函数操作是指向对象的指针或对象引用D)动态联编是在编译时确定操作函数的注:先期联编也称静态联编,迟后联编也称动态联编。注释:动态联编一直要到程序运行时才能确定调用哪个函数。虚函数是实现动态联编的必要条件之一。没有虚函数一定不能实现动态联编,但有虚函数存在时,必须同时满足下列条件,才能够实现动态联编:类之间满足子类型关系;调用虚函数操作
2、的是指向对象的指针或者对象引用:或者是由成员函数调用虚函数。2 关于虚函数的描述中,正确的是_。D A)虚函数是一个静态成员函数 B)虚函数是一个非成员函数 C)虚函数既可以在函数说明时定义,也可以在函数实现时定义D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型注释:虚函数是非静态的成员函数。它不能是友元函数,但可以在另一个类中被声明为友元函数。虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的时候。派生类的虚函数与基类中对应的虚函数必须满足下列条件,否则派生类中的虚函数将丢失其虚特性,在调用时进行静态联编:派生类中的虚函数与基类中的虚函数具有相同的名称:
3、派生类中的虚函数与基类中的虚函数具有相同的参数个数和相同的对应参数类型:派生类中的虚函数与基类中的虚函数的返回值或者相同,或者都返回指针或引用,并且派生类虚函数所返回的指针或引用的基类型是基类中的虚函数所返回的指针或引用的基类型的子类型。3 在下面四个选项中,_是用来声明虚函数的。A A)virtual B)public C)using D)false 注释:说明虚函数的一般格式如下:virtua1()4 对虚函数的调用_。D A)一定使用动态联编 B)必须使用动态联编C)一定使用静态联编 D)不一定使用动态联编注释:参见第1 题的注释。5 实现运行时的多态性要使用_。D A)重载函数 B)构
4、造函数 C)析构函数 D)虚函数注释:参见第1 题的注释。6 要实现动态联编,必须通过_调用虚函数。A A)对象指针 B)成员名限定 C)对象名 D)派生类名名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 22 页 -注释:参见第1 题的注释。7 在派生类中重新定义虚函数时,除了_方面,其他方面都必须与基类中相应的虚函数保持一致。D A)参数个数 B)参数类型 C)函数名称 D)函数体注释:参见第2 题的注释。8 下面关于构造函数和析构函数的描述,错误的是_。D A)析构函数中调用虚函数采用静态联编B)对虚析构函数的调用可以采用动态联编C)当基类的析构函数是虚函数时,其派生类的析
5、构函数也一定是虚函数D)构造函数可以声明为虚函数注释:构造函数不能声明为虚函数,但析构函数可以声明为虚函数。当基类的析构函数声明为虚函数时,无论派生类是否使用virtual关键字说明,派生类的析构函数一定是虚函数,对缺省析构函数亦然。而且,如果满足动态联编的其他条件,对虚析构函数的调用将采用动态联编。构造函数不能声明为虚函数,但在构造函数中可以调用虚函数。在构造函数或析构函数中调用虚函数,将采用静态联编。9 关于纯虚函数和抽象类的描述中,错误的是_。C A)纯虚函数是一种特殊的虚函数,它没有具体的实现B)抽象类是指具有纯虚函数的类C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类D)
6、抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出注释:带有纯虚函数的类称为抽象类。抽象类中的纯虚函数的实现由派生类给出:但派生类仍可不给出纯虚函数的定义,继续作为抽象类存在。10 下列描述中,_是抽象类的特性。D A)可以说明虚函数 B)可以进行构造函数重载C)可以定义友元函数 D)不能说明其对象注释:抽象类区别于其他类的最根本的特征是不能定义对象。11 _ 是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。C A)虚析构函数 B)虚构造函数 C)纯虚函数 D)静态成员函数12 如果一个类至少有一个纯虚函数,那么就称该类为_。A A)抽象类 B)虚基
7、类 C)派生类 D)以上都不对13 以下 _成员函数表示纯虚函数。C A)virtual int vf(int);B)void vf(int)=0;C)virtual void vf()=0;D)virtual void vf(int)()注释:纯虚函数的声明格式如下:virtual()=0;注意纯虚函数与虚函数体为空的区别。纯虚函数根本就没有函数体,而空的虚函数的函数体为空:前者所在的类是抽象类,不能直接进行实例化,而后者所在的类是可以实例化的:14 下面的描述中,正确的是_。A A)virtual可以用来声明虚函数名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 22 页 -B
8、)含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C)即使基类的构造函数没有参数,派生类也必须建立构造函数D)静态数据成员可以通过成员初始化列表来初始化注释:virtual关键字既可以用来声明虚基类,也可以用来声明虚函数。含有纯虚函数的类是抽象类,它不能用来定义对象。静态数据成员的初始化必须在类体外进行。如果所有的基类和子对象构造函数都不需要参数,派生类也不需要参数时,派生类构造函数可以不定义。15 在下面程序中,A、B、C、D四句编译时不会出现错误的是_。A#include class Base public:Base()Base(int c):count(c)virtual void
9、 print()const=0;private:int count;class Derived:public Base public:Derived():Base(0)Derived(int c):Base(c)void print()const coutDerivedendl;void main()Derived d(10);Base*pb;pb=&d;/A Base&cb=d;Derived dd=*pb;Derived&cd=cb;/C Base bb=d;/D 注释:B和 C处不符合赋值兼容规则。D处出错是因为Base 是含有纯虚函数的抽象类,不能建立抽象类的对象。16在下面程序中,A
10、,B、C、D四句编译时出现错误的是_。C class A /A public:/B A()func();/C virtual void func()=0;/D 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 22 页 -;注释:构造函数中不能调用纯虚函数,但可以调用虚函数。17 分析下面的程序,正确的输出结果是_B#include#include class Base public:virtual char*fun()const=0;char*Base:fun()const return“Base”;class Derivedl1:virtual public Base publ
11、ic:char*fun()const return Derived11;class Derivedl2:virtual public Base public:char*fun()const return Derivedl2;class Derived2:public Derivedl1,public Derivedl2 public:char*fun()const char*ptr;ptr=new charstrlen(Derivedl1:fun()+strlen(Derivedl2:fun()+l;strcpy(ptr,Derived11:fun(),strcat(ptr,Derived12
12、:fun();return ptr;void main()Base*pb;pb=new Derived11;coutfun()endl;pb=new Derivedl2;coutfun()endl;pb=new Derived2;coutfun()endl;A)B)名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 22 页 -Base Derivedl1 Base Derivedl2 Base Derivedl1Derivedl2 C)D)Derivedl1 Derivedl2 Derivedl1 Derivedl2 Derivedl1Derivedl2 Derivedl1Deri
13、vedl2 注释:参见第 1题、第 2 题的注释。派生类Derivedll、Derivedl2 和Derived2 中的函数 fun 与基类 Base中的虚函数 fun 的函数名、参数表和返回类型都完全相同,因此这三个类中的 fun 函数也是虚函数,对fun 函数的调用采用动态联编。二、填空题1动态联编中直到_程序运行 _时才能确定调用哪个函数;而静态联编则是在_程序编译时进行的。注释:动态联编与静态联编的概念。2 静态联编所支持的多态性称为_编译时的 _多态性,动态联编所支持的多态性则称为 _运行时的 _多态性,动态多态性由_虚函数 _来支持。注释:在C+中,多态性的实现和联编有关。3 对虚
14、函数使用对象指针或引用调用,系统使用_动态 _联编;使用对象调用时系统使用 _静态_联编。注释:参见选择填空第1 题、第 5 题的注释。4 动态联编是在_虚函数 _的支持下实现的,它通过_指针或引用 来调用该函数操作。5 在一个成员函数内调用一个虚函数时,对该虚函数的调用进行_动态 _联编。6 在析构函数中调用虚函数时,采用_静态 _联编。7C+中_不支持 _虚构造函数,但_支持 _虚析构函数。注释:参见选择填空第8 题的注释。多态是不同的对象对同一消息有不同的行为特征,虚函数作为运行过程中多态的基础,主要是针对对象的,而构造函数的调用意味着要建立一个对象,这时必须确切地知道这个对象的类型,并
15、且,我们也不会为一个已存在的对象调用构造函数。因此,虚构造函数没有意义。在 C+中可以声明虚析构函数。析构函数的功能是在该类对象消亡之前进行一些必要的清理工作,如果一个类的析构函数是虚函数,那么,由它派生而来的所有子类的析构函数也是虚函数。析构函数设置为虚函数后,在使用指针调用时可以进行动态联编,实现运行时的多态,从而保证使用基类的指针就能够调用适当的析构函数针对不同的对象进行清理工作。8 在类定义中,将_=0_置于虚函数的函数原型的末尾可以将该函数声明为纯虚函数名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 22 页 -9 带有 _纯虚函数 _的类称为抽象类,它只能作为_基类
16、_来使用。注释:抽象类的作用主要有两个:直接用作基类或用作指针或引用的基类型。10 抽象类不能_定义对象 _,但可以 _声明抽象类的指针或引用_作为参数类型,函数返回类型或显式转换类型。注释:注意抽象类不能定义对象是指不能定义需要分配存储空间的对象。因此可以声明抽象类的指针或引用,它们在程序运行时可以指向并访问派生类对象。11 下列程序的运行结果如下:Derivels Print()called.Derive2s Print()called.根据结果将程序补充完整。#include class Base public:Base(int i)b=i;_virtual void Print()=0
17、;_ protected:int b;class Derivel:public Base public:_Derive1(int i):Base(i)_ void Print()cout”Derive1 s Print()called.”endl;class Derive2:public Base _public:Derive1(int i):Base(i)void Print()cout”Derive2 s Print()called.“Print();void main()_Derive1*d1=new Derive1(1);_ Derive2*d2=new Derive2(2);名师资料
18、总结-精品资料欢迎下载-名师精心整理-第 7 页,共 22 页 -fun(dl);fun(d2);注释:派生类Derived1和 Derived2从基类Base 公有继承,它们是Base 的子类型。主程序中两次调用fun 函数,该函数通过指针对象obj 调用了Print函数,得到了不同的输出结果。而同样的消息被不同类型的对象接收时导致完全不同的行为,恰好体现了面向对象的多态特性。根据运行时的多态必须满足的条件,Print函数一定是一个虚函数,并且在所有类中都必须进行定义。由于Base 类中的Print函数除了提供一个公共的接口外,没有其他的作用,所以最好定义为纯虚函数。12 将下列程序补充完整
19、。#include class convert public:convert(double i)vail=i;_virtual void compute()=0;_ protected:double val1;double val2;/liters to gallons class l_to_g:public convert public:_l_to_g(double i):convert(i)_ void compute()val2=val1/3.7854;coutval1 liters is val2 gallons.endl;/Fahrenheit to Celsius class f_
20、to_c:public convert _public:f_to_c(double i):convert(i)void compute()名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 22 页 -val2=(val1-32)*5/9;coutval1”Fahrenheit is“val2”Celsius.”endl;void fun(_convert&f _)pute();void main()l_to_g lgobj(4);f_to_c fcobj(70);fun(lgobj);fun(fcobj);13 根据不同的输出结果,在函数Tone中填入正确的语句。#include
21、class Instrument public:virtual void Print()const coutInstrument:Printendl;class Piano:public Instrument public:void Print()const coutPiano:Printendl;class Guitar:public Instrument public:void Print()const coutGuitar:Printendl;void Tone(_)_ void main()Guitar g;Tone(g);Piano p;Tone(p);名师资料总结-精品资料欢迎下载
22、-名师精心整理-第 9 页,共 22 页 -(1)输出结果为:Instrument:Print Instmment:Print(2)输出结果为:Guitar:Print Piano:Print(1)Instrument obj obj.Print()(2)Instrument&obj obj.Print()参考第 3题,第一次的输出是由静态联编产生的,第二次的输出是由动态态联编产生的。14下列程序的运行结果如下:Bases cons.Deriveds cons.Deriveds des.Bases des.根据结果将程序补充完整。#include class Base public:Base(
23、)coutBases cons.endl;_virtual Base()_ coutBases des.endl;class Derived:public Base public:Derived()coutDeriveds cons.endl;Derived()coutDeriveds des.endl;void main()Base*ptr=_new Derived _ delete ptr;名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 22 页 -三、编程1在作业 1编程 1 的 Point 类中完成赋值运算符=、插入运算符、比较运算符=、!=和加法运算符+、-的重载。#
24、include#include class Point public:Point(float x=0,float y=0,float z=0):x_(x),y_(y),z_(z)Point(const Point&p):x_(p.x_),y_(p.y_),z_(p.z_)/形参 point 为常引用,它所引用的对象不能被更新,即传给它的实参不能被更新。void negate()x_*=-1;y_*=-1;z_*=-1;double norm()return sqrt(x_*x_+y_*y_+z_*z_);void print()cout (x_ ,y_ ,z_ );Point&operator
25、=(const Point&point);bool Point:operator=(const Point&point)const /常成员函数,只有它才有资格操作常量和常对象 return x_=point.x_&y_=point.y_&z_=point.z_;bool Point:operator!=(const Point&point)const return x_!=point.x_|y_!=point.y_|z_!=point.z_;friend Point operator+(const Point&p1,const Point&p2);friend Point operator-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C+网络作业答案复习课程 2022 C+ 网络 作业 答案 复习 课程
限制150内