




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文档供参考,可复制、编制,期待您的好评与关注! 习题四填空题1、联编是指一个程序模块、调用代码之间互相关联的过程。根据联编的时机不同,可以分为静态联编和( 动态联编 )。2、包含一个或多个纯虚函数的类称为(抽象类 )。3、虚函数应该在( 基类 )中声明,且不能在派生类中重新定义。4、纯虚函数是( 只有函数声明而没有具体函数功能实现的虚函数)。5、在析构函数前面加上关键字( virtual)进行说明,称该析构函数为虚析构函数。6、如果一个基类的析构函数被说明为虚析构函数,则它的派生类中的(析构函数 )也是虚析构函数。7、多态性分为两类:编译时的多态性和( 运行时的多态性 ),编译时的多态性是通过
2、和( 函数 )模板实现的。8、对虚函数的调用有两种方式:( 指针调用 )和( 对象调用 )。9、实现编译时的多态性的机制称为(静态关联 ),实现运行时的多态性的机制称为( 动态关联 )。10、有一种特殊的虚函数,重定义时不要求同名,这种虚函数是(虚析构函数 )。11、模板可以实现程序设计中的( 代码重用 ),体现了面向对象程序设计的(重用性 )。12、C+模板可以分为( 函数模板 )和(类模板 )。13、由函数模板实例化后是( 模板函数 ),由类模板实例化后是(模板类 )。14、模板的声明使用关键字(template )。15、已知int sum(int n)return n+n;long s
3、um(long n)return n+n;是一个函数模板的两个实例,则该函数模板的定义是( template<typename T>T sum(T n)return n+n; )。选择题1、下面的4个关键字中,( A )是用来说明虚函数的。A. virtualB. publicC. protectedD. private2、实现运行时的多态性要使用( D )。A. 重载函数B. 构造函数C. 析构函数D.虚函数3、如果一个类至少有一个纯虚函数,那么该类称为( C )。A. 虚基类B. 派生类C. 抽象类D. 以上都不对4、下列描述中,( D )是抽象类的特征。A. 可以说明虚函数B
4、. 可以进行构造函数重载C. 可以定义友元D. 不能说明其对象5、下列关于虚函数的描述中,( C )是正确的。A. 虚函数是一个非成员函数B. 虚函数是一个静态成员函数C. 派生类的虚函数与基类种对应的虚函数具有相同的参数个数和类型D. 虚函数既可以在函数说明时定义,也可以在函数实现时定义6、下列关于纯虚函数与抽象类的描述中,( C )是错误的。A. 抽象类是指具有纯虚函数的类B. 纯虚函数是一个特殊的虚函数,它没有具体的实现C. 一个基类中说明具有纯虚函数,该基类的派生类一定不再是抽象类D. 抽象类只能作为基类来用,其纯虚函数的实现由派生类给出7、下列各函数的说明中,( B )表示纯虚函数。
5、A. virtual int vf(int);B. void vf(int)=0;C. virtual void vf()=0;D. virtual void vf(int)8、虚函数必须是类的( D )。A. 友元函数B. 构造函数C. 析构函数D. 成员函数9、下列关于虚函数的描述中,( A )是正确的。A. 虚函数不能声明为另一个类的友元函数B. 虚函数不能声明为静态成员函数C. 派生类必须重新定义基类的虚函数D. 如果在重定义虚函数时使用了保留字virtual,则该重定义函数仍然是虚函数10、多态调用是指( C )。A. 以任何方式调用一个虚函数B. 以任何方式调用一个纯虚函数C. 借
6、助于指向对象的基类指针或引用调用一个虚函数D. 借助于指向对象的基类指针或引用调用一个纯虚函数11、在C+中,要实现动态联编,必须使用( D )调用虚函数。A. 类名B. 派生类指针C. 对象名D. 基类指针12、下列函数中,可以作为虚函数的是( D )。A. 普通函数B. 构造函数C. 友元函数D. 析构函数13、在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数返回值( B )。A. 不同B. 相同C. 相容D. 部分相同14、假设Aclass为抽象类,下列声明( B)是正确的。A. Aclass fun(int);B. Aclass *p;C. int f
7、un(Aclass);D. Aclass Obj;15、下面描述中,正确的是( D )。A. 虚函数是没有实现的函数B. 纯虚函数的实现只能在直接派生类中定义C. 抽象类是只有纯虚函数的类D. 抽象类指针可以指向不同的派生类16、当运行程序时实际上是将类模板实例化为一个具体的( D )。A. 类B. 对象C. 函数D. 模板类17、模板函数的真正代码是在( C )时产生的。A. 源程序中声明函数时B. 源程序中定义函数时C. 源程序中调用函数时D. 运行执行函数时18、类模板的模板参数( D )。A. 只可作为数据成员的类型B. 只可作为成员的返回值类型C. 只可作为成员函数的参数类型D. 以
8、上三者皆可19、以下关于模板的叙述中,不正确的是( C )。A. 用模板定义一个对象时不能省略参数B. 类模板只能有虚拟参数类型C. 类模板的成员函数都是模板函数D. 类模板本身在编译中不会生成任何代码20、如果有如下函数模板的定义:template <class T>T func(T x,T y)return x+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、构造函
9、数可以作为虚函数使用。N3、虚函数是没有实现的函数。N4、在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数返回值部分相同。N5、抽象类是只有纯虚函数的类。N6、构造函数可以作为虚函数。N7、纯虚函数是一个特殊的虚函数,它没有具体的实现。8、虚函数的声明需要使用关键字protected。N9、设置虚函数的目的是为了消除二义性。N10、抽象类只能作为基类使用,其纯虚函数的实现由派生类来完成。分析题1、#include<iostream.h>class Apublic:A()cout<<endl<<"实例化类A的一个对象
10、。"virtual A()cout<<endl<<"消除类A的一个对象。"virtual void f()cout<<endl<<"执行类A的成员函数。"class B:public Apublic:B()cout<<endl<<"实例化类B的一个对象。"virtual B()cout<<endl<<"消除类B的一个对象。"void f()cout<<endl<<"执行类B的成
11、员函数。"void main()A a=A();B b=B();cout<<endl<<"-"a.f();b.f();cout<<endl<<"-"A *p;p=&b;p->f();cout<<endl<<"-"2、#include<iostream.h>class shapepublic:shape();virtual shape()cout<<"Execting shape dtor"<
12、<endl;class Circle:public shapepublic:Circle();Circle()cout<<"Execting Circle dtor"<<endl;void main()shape *pShape=new Circle;delete pShape;3、#include <iostream>using namespace std;class Baseprivate:int x;public:Base(int a=0) x=a; virtual void fun() cout<<"B
13、ase fun"<<endl; virtual Base() cout<<"Base"<<endl; ;class Derived:public Baseprivate:int y;public:Derived(int a=0,int b=0):Base(a) y=b; void fun() cout<<"Derived fun"<<endl; Derived() cout<<"Derived"<<endl; ;void GFun(Base
14、*p) p->fun(); int main()Derived *p=new Derived;GFun(p);delete p;return 0;4、#include<iostream.h>class Basepublic:virtual int func()return 10;class Derived:public Basepublic:int func()return 80;void main()Derived d;Base&b=d;cout<<b.func()<<endl;cout<<b.Base:func()<<
15、;endl;5、#include<iostream.h>class basepublic:virtual void who()cout<<"base class1"<<endl;class derive1:public basepublic:void who()cout<<"derive1 class2"<<endl;class derive2:public basepublic:void who()cout<<"derive2 class3"<<en
16、dl;void main()base obj1,*p;derive1 obj2;derive2 obj3;p=&obj1;p->who();p=&obj2;p->who();p=&obj3;p->who();obj2.who();obj3.who();6、#include<iostream>#include<cstring>using namespace std;class Base char base_name20;public: Base()strcpy(base_name,"BASE"); virtua
17、l char*my_name()return base_name; char*class_name()return base_name;class Derived:public Basechar derived_name20;public: Derived()strcpy(derived_name,"DERIVED"); char*my_name()return derived_name; char*class_name()return derived_name;void show_ptr(Base*p)cout<<endl<<p->my_na
18、me()<<""<<p->class_name();void show_ref(Base&r)cout<<endl<<r.my_name()<<""<<r.class_name();int main() Base bb; Derived dd; cout<<endl; show_ptr(&bb);cout<<"<=应显示'ABCD EFG'" show_ptr(&dd);cout<&
19、lt;"<=应显示'DERIVED EFG'" cout<<endl; show_ref(bb);cout<<"<=应显示'ABCD EFG'" show_ref(dd);cout<<"<=应显示'DERIVED EFG'"cout<<endl; cout<<endl<<dd.Base:my_name()<<""<<dd.Base:class_name()
20、; cout<<"<=应显示'ABCD EFG'" return 0;7、#include<iostream.h>#include<math.h>const double PI=3.14;class Circleprotected:double r; public:Circle(double radius=0):r(radius)virtual double Area()=0 ; virtual double Volume()=0; ;class Sphere:public Circle public:Sphere(
21、double radius=0):Circle(radius)double Area()return 4*PI*r*r;double Volume()return 4*PI*pow(r,3)/3;class Cylinder:public Circle double h;public:Cylinder(double radius=0,double height=0):Circle(radius)h=height;double Area()return 2*PI*r*(r+h);double Volume()return PI*r*r*h;class Cone:public Circle dou
22、ble h;public:Cone(double radius=0,double height=0):Circle(radius)h=height;double Area()double l=sqrt(h*h+r*r); return PI*r*r*(r+l);double Volume()return PI*r*r*h/3;void Output(Circle*b,int n)for(int i=0;i<n;i+)cout<<bi->Area()<<" "<<bi->Volume()<<endl;void
23、main()Sphere r1(2);Cylinder r2(2,3);Cone r3(2,3);Circle*a3=&r1,&r2,&r3;Output(a,3);8、#include<iostream.h>template <class T>T min(T x,T y)if (x<y)return x;elsereturn y;void main()int n1=2,n2=8;double d1=2.3,d2=5.6;cout<<min(n1,n2)<< " "cout<<min(
24、d1,d2)<< endl;9、#include<iostream.h>template <typename T>T total(T *p)T sum=0;while(*p)sum+=*p+; return sum;int main()int x=1,3,5,7,9,0,13,15,17;cout<<total(x);return 0;一、 编程题1、生成容器类RQ,提供成员函数calTJ()计算容器的体积,定义calTJ()为纯虚数,生成LFT类表示立方体,数据成员A表示立方体的边长,提供成员函数calTJ()计算立方体的体积;生成长方体类CF
25、T,数据成员A,B,C分别表示长方体的长,宽和高,提供成员函数calTJ()计算长方体的体积,类CFT和类LFT都继承类RQ。2、在一个公司里,主管和员工的月工资计算方法规定如下:主管的每月工资固定为4200元;员工的每月工资与加班的时间有关,计算方法是每加班一小时50元,固定工资为2500元。编程实现每个人的月工资。要求利用纯虚函数实现。3、编程计算圆形(Circle)和正方形(Square)的周长和面积。要求定义一个抽象类,其中包括求周长(per)和面积(area)的纯虚函数,然后在此基类的基础上,派生出圆形类和正方形类,主函数通过基类的指针调用各派生类的函数。4、用函数模板实现求两个整数
26、、两个浮点数和两个字符中的最小值。5、定义一个类模板input,在调用构造函数时,完成的工作包括:提示用户输入;让用户输入数据;如果用户输出数据不在预定范围内,提示重新输入。习题答案一、 填空题1、动态联编2、抽象类3、基类4、只有函数声明而没有具体函数功能实现的虚函数。5、virtual6、析构函数7、运行时的多态性 ,函数8、指针调用 ,对象调用9、静态联编 ,动态联编10、虚析构函数11、代码重用 ,可重用性12、函数模板 ,类模板13、模板函数,模板类14、template15、template <typename T>T sum(T n)return n+n;二、 选择题
27、1、A2、D 3、C 4、D 5、C 6、C 7、C 8、D 9、A 10、C 11、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、Execting Circle dtorExecting shape dtor3、Deri
28、ved funDerivedBase4、80105、base class1derive1 class2derive2 class3derive1 class2derive2 class36、BASEBASE<=应显示'ABCD EFG'DERIVEDBASE<=应显示'DERIVED EFG'BASEBASE<=应显示'ABCD EFG'DERIVEDBASE<=应显示'DERIVED EFG'BASEBASE<=应显示'ABCD EFG'7、50.24 33.493362.8 37.
29、6870.4057 12.568、2 2.39、25五、编程题1、#include<iostream.h>class RQpublic:virtual float calTJ()=0;virtual void display()=0;class LFT:public RQprivate: float A;public:LFT(float a)A=a; float calTJ()return A*A*A;void display()cout<<"立方体体积为"<<calTJ()<<endl;class CFT:public RQ
30、private: float A,B,C;public:CFT(float a,float b,float c)A=a;B=b;C=c;float calTJ()return A*B*C;void display()cout<<"长方体体积为"<<calTJ()<<endl;void main()RQ *p;LFT L1(3);CFT C1(1,2,3);p=&L1;p->display();p=&C1;p->display();2、#include<iostream.h>class Employe
31、epublic: virtual double earn()=0;virtual void print()=0;class Manager:public Employeeprivate:double msalary;public:Manager(double ms)msalary=ms;double earn()return msalary;void print()cout<<"主管月工资为:"<<earn()<<endl;class Hworker:public Employeeprivate:double wage;int hours
32、;public:Hworker(double w,int h)wage=w;hours=h;double earn()return 2500+hours*50;void print()cout<<"员工加班"<<hours<<"小时工资为:"<<earn()<<endl;void main()Employee *p;Manager m1(4200);Hworker h1(2500,3);p=&m1;p->print();p=&h1;p->print();3、#incl
33、ude "iostream.h"#include "math.h"const double PI=3.14;class Shapepublic:virtual void GetPerimeter()=0;virtual void GetArea()=0;protected:double per;double area; class Circle:public Shapedouble Radius;public:Circle(double r) Radius=r; void GetPerimeter() per=2*PI*Radius; cout<<"Circle's perimeter:"<<per<<endl; void GetArea() are
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年辽宁省大连市庄河市数学三年级第一学期期末监测模拟试题含解析
- 2024年娄底市冷水江市三年级数学第一学期期末统考试题含解析
- 2024年吉林省长春汽车经济技术开发区第五学校数学三上期末质量检测试题含解析
- 2025年执业护士考试趋势及试题答案
- 主管护师信心提升的试题及答案
- 药师职业道德与试题及答案
- 2025年药师考试考场应对策略试题及答案
- 2025年执业医师考试真题预测试题及答案
- 护理教育改革的方向试题及答案
- 行政法学对于青年法律人才培养的影响试题及答案
- 科研伦理试题答案及解析
- 2025成都市新劳动合同书范本
- 第二章中国体育产业的发展与现状
- 2025届高三押题信息卷(一)地理及答案
- 2025南京房屋租赁合同
- 新型伤口敷料应用于预防压力性损伤的研究进展
- DB3303T078-2024规模以上工业企业健康评价指标体系
- 2025年北京市朝阳区九年级初三一模英语试卷(含答案)
- GB 7718-2025食品安全国家标准预包装食品标签通则
- GB/T 45403-2025数字化供应链成熟度模型
- 咸宁叉车考试题及答案
评论
0/150
提交评论