习题三(带答案)_第1页
习题三(带答案)_第2页
习题三(带答案)_第3页
习题三(带答案)_第4页
习题三(带答案)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

习 题 三 一、填空题 1、 在类继承中,默认的继承方式是( )。 2、对于派生类的构造函数,在定义对象时构造函数的调用顺序为:先执行( )、再执行( ),最后执行( )。多重继承方式下,处于同一层次的基类构造函数的执行顺序由派生类的( )。 顺序决定。3、 在动态关联中,被调用函数是在( )阶段确定的。 在静态关联中,被调用函数是在( )阶段确定的。 4、 消除继承中的二义性的两种方法分别是:( )和( )。 5、 C+中引进虚基类的目的是:( )。 6、 抽象类是指 ( )。 7、 抽象类不能定义( ),但可以定义( )和( )。 8、不允许是虚函数的类的成员函数是( )。 9、 若在派生类构造函数的成员初始化列表中出现了虚基类和非虚基类的构造函数的调用,则它们的执行顺序是:先执行( )的构造函数,再执行( )的构造函数。 10、 在C+中,一个名字可具有多种语义的特性称为( 多态性 ) 。11、在C+语言中,派生类继承了基类的全部数据成员和除( )之外的全部函数成员。12、在公有继承关系下,派生类的对象可以访问基类中的( )成员,派生类的成员函数可以访问基类中的( )成员。13、在保护继承关系下,基类的公有成员和保护成员将成为派生类中的( )成员,它们只能由派生类的( )来访问,基类的私有成员将成为派生类中的( )成员。14、在私有继承关系下,基类的公有成员和保护成员将成为派生类中的( )成员,它们只能由派生类的( )来访问,基类的私有成员将成为派生类中的( )成员。15、继承具有( ),即当基类本省也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。16、虚函数应该在( )中声明,且不能在派生类中重新定义。17、纯虚函数是( )。18、在析构函数前面加上关键字( )进行说明,称该析构函数为虚析构函数。19、对虚函数的调用有两种方式:( )和( )。20、有一种特殊的虚函数,重定义时不要求同名,这种虚函数是( )。1、private(或私有继承) 2、基类的构造函数、子对象的构造函数、派生类本身的构造函数 (对基类的)继承顺序3、 (程序)运行 (程序)编译 4、使用作用域运算符:指明其继承的途径, 使用虚基类 5、消除继承中的二义性 6、含有纯虚(成员)函数的类; 7、对象,对象指针,对象引用 8、构造函数 9、虚基类、非虚基类 10、多态性11、构造函数和析构函数12、公有,公有和保护13、保护,成员函数,不可访问14、私有,成员函数,不可访问15、传递性16、基类 17、只有函数声明而没有具体函数功能实现的虚函数。18、virtual19、指针调用 ,对象调用20、虚析构函数二、选择题 1、 对于下面类定义的叙述中正确的是(C ) class A public: virtual void func1( ) void func2( ) ; class B: public A public : void func1( ) coutclass B func1endl; virtual void func2( ) coutclass B func2endl; ; A. A:func2()和B:func1()都是虚函数 B. A:func2()和B:func1()都不是虚函数 C. B:func1()是虚函数,而A:func2()不是虚函数 D. B:func1()不是虚函数,而A:func2()是虚函数 2、设有基类定义:class Baseprivate:int a;protected: int b;public: int c;派生类采用( )继承方式可以使成员变量b成为自己的私有成员。A. 公有继承B.保护继承C. 私有继承D. 私有、保护、公有均可3、基类中的( )不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。A. 公有成员B.私有成员C. 私有成员函数D. 保护成员4、建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(子对象的构造函数)和c(派生类的构造函数),这3种构造函数的调用顺序为( )。A.abc B.acb C.cab D.cba5、阅读以下程序class Aint x;public:A(int xx)x=xx;class B:public Aint y;public:B(int xx,int yy);对构造函数B的定义中,正确的是( )A、B:B(int xx,int yy):A(xx),B(yy) B、B:B(int xx,int yy):x(xx),B(yy) C、B:B(int xx,int yy):A(xx),y(yy) D、B:B(int xx,int yy):x(xx),y(yy) 6、在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回类型( )A、不同 B、部分相同 C、完全相同 D、没有要求7、下列关于类的继承描述中,( )是正确的。A、派生类可以访问基类的所有数据成员,调用基类的所有成员函数B、派生类也是基类,所以基类具有派生类的全部属性和方法C、继承描述类的层次关系,派生类不可以具有与基类相同的属性和方法D、一个基类可以有多个派生类,一个派生类可以有多个基类8、 当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的( )。A、public成员B、private成员C、protected成员D、友员9、下面描述中,错误的是( )。A、在基类定义中的public成员在公有继承的派生类中可见,也能在类外被访问B、在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问C、在基类定义的public和protected成员在保护继承的派生类中可见D、在派生类中不可见的成员要变成可访问的需要进行访问声明10、在创建派生类对象时,构造函数的执行顺序是( )。A、子对象构造函数、基类构造函数、派生类本身的构造函数B、派生类本省的构造函数、基类构造函数、对象成员构造函数C、基类构造函数、派生类本身的构造函数、对象成员构造函数D、基类构造函数、对象成员构造函数、派生类本省的构造函数11、 当不同的类具有相同的间接基类时,具有的特点是( )。A、各派生类对象中不存在基类版本B、派生类对象无法产生自己的基类版本C、为了建立惟一的间接基类版本,应该改变继承方式D、为了建立惟一的间接基类版本,应该声明虚基类12、带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象进行初始化有( )。A、一次B、两次C、多次D、与虚基类下面的派生类个数有关13、下面关于派生类的描述中,正确的是( )。A、派生类的默认继承方式是保护的B、一个派生类不可以作为另一个派生类的基类C、派生类只继承了基类的公有成员和保护成员D、一个派生类可以有多个基类14、实现运行时的多态性要使用( )。A. 重载函数B. 构造函数C. 析构函数D.虚函数15、如果一个类至少有一个纯虚函数,那么该类称为( )。A. 虚基类B. 派生类C. 抽象类D. 以上都不对16、下列描述中,( )是抽象类的特征。A. 可以说明虚函数B. 可以进行构造函数重载C. 可以定义友元D. 不能说明其对象17、下列关于虚函数的描述中,( )是正确的。A. 虚函数是一个非成员函数B. 虚函数是一个静态成员函数C. 派生类的虚函数与基类种对应的虚函数具有相同的参数个数和类型D. 虚函数既可以在函数说明时定义,也可以在函数实现时定义18、下列关于纯虚函数与抽象类的描述中,( )是错误的。A. 抽象类是指具有纯虚函数的类B. 纯虚函数是一个特殊的虚函数,它没有具体的实现C. 一个基类中说明具有纯虚函数,该基类的派生类一定不再是抽象类D. 抽象类只能作为基类来用,其纯虚函数的实现由派生类给出19、下列各函数的说明中,( )表示纯虚函数。A. virtual int vf(int);B. void vf(int)=0;C. virtual void vf()=0;D. virtual void vf(int)20、虚函数必须是类的( )。A. 友元函数B. 构造函数C. 析构函数D. 成员函数21、下列关于虚函数的描述中,( )是正确的。A. 虚函数不能声明为另一个类的友元函数B. 虚函数不能声明为静态成员函数C. 派生类必须重新定义基类的虚函数D. 如果在重定义虚函数时使用了保留字virtual,则该重定义函数仍然是虚函数22、多态调用是指( )。A. 以任何方式调用一个虚函数B. 以任何方式调用一个纯虚函数C. 借助于指向对象的基类指针或引用调用一个虚函数D. 借助于指向对象的基类指针或引用调用一个纯虚函数23、在C+中,要实现动态联编,必须使用( )调用虚函数。A. 类名B. 派生类指针C. 对象名D. 基类指针24、下列函数中,可以作为虚函数的是( )。A. 普通函数B. 构造函数C. 友元函数D. 析构函数25、下面描述中,正确的是( )。A. 虚函数是没有实现的函数B. 纯虚函数的实现只能在直接派生类中定义C. 抽象类是只有纯虚函数的类D. 抽象类指针可以指向不同的派生类1、C 2、C 3、D4、A5、C6、C7、D8、A9、B10、D11、D12、A13、D 14、D 15、C 16、D 17、C 18、C 19、C 20、D 21、A 22、C 23、D24、D25、D三 判断题1、派生类中继承的基类成员的访问权限在派生类中保持不变。2、在基类定义的public和protected成员在保护继承的派生类中可见。3、当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的保护成员。4、一个基类可以有多个派生类,一个派生类可以有多个基类。5、基类的构造函数和析构函数可以被派生类继承。6、派生类也是基类,所以基类具有派生类的全部属性和方法。7、当不同的类具有相同的间接基类时,为了建立惟一的间接基类版本,应该声明虚基类。8、构造函数可以作为虚函数使用。9、虚函数是没有实现的函数。10、在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数返回值部分相同。11、抽象类是只有纯虚函数的类。12、纯虚函数是一个特殊的虚函数,它没有具体的实现。13、虚函数的声明需要使用关键字protected。14、设置虚函数的目的是为了消除二义性。15、抽象类只能作为基类使用,其纯虚函数的实现由派生类来完成。1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、四、程序分析题(写程序运行结果) 1.#include #include class Basepublic:int x;void Print()coutBase:x isxendl;class Derived1:public Basepublic:void Print()coutDerived1:x isxendl;class Derived2:private Basepublic:Derived2()Base:x=4;int x;void Print()coutDerived2s Base:x is Base:xendl; coutDerived2:x is xendl;void main()Base objB;Derived1 objD1;Derived2 objD2;objB.x=1;objD1.x=2;objD2.x=3;objB.Print();objD1.Print();objD2.Print();2#includeclass basepublic:void who()coutbase class1endl;class derive1:public basepublic:void who()coutderive1 class2endl;class derive2:public basepublic:void who()coutderive2 class3who();p=&obj2;p-who();p=&obj3;p-who();obj2.who();obj3.who();3、#includeclass Apublic:A(int i,int j)a=i;b=j;void move(int x,int y)a+=x;b+=y;void show()cout(a,b)endl;private:int a,b;class B:public Apublic:B(int i,int j,int k,int l):A(i,j),x(k),y(l)void show()coutx,yendl;void fun()move(3,5);void f1()A:show();private:int x,y;void main()A e(2,3);e.show();B d(4,5,6,7);d.fun();d.A:show();d.B:show();d.f1();4 #include using namespace std;class Baseprivate:int x;public:Base(int a=0) x=a; virtual void fun() coutBase funendl; virtual Base() coutBaseendl; ;class Derived:public Baseprivate:int y;public:Derived(int a=0,int b=0):Base(a) y=b; void fun() coutDerived funendl; Derived() coutDerivedfun(); int main()Derived *p=new Derived;GFun(p);delete p;return 0;5#includeclass Basepublic:virtual int func()return 10;class Derived:public Basepublic:int func()return 80;void main()Derived d;Base&b=d;coutb.func()endl;coutb.Base:func()endl;五、编程题 1、定义一个Person类,包括姓名Name和年龄Age。定义Student类继承Person,增加成员学号Num。再定义CollegeStudents类继承Student,增加成员专业Speciality。每个类均包括构造函数、析构函数、设置信息函数和显示信息函数。在main函数中分别定义三个类的对象进行测试。2、定义B0是虚基类,B1和B2都继承B0,D1同时继承B1和B2,他们都是公有派生,这些类都有同名的公有数据成员和公有函数,编制主程序,生成D1的对象,通过限定词:分别访问D1,B0,B1,B2的公有成员。3、编写程序对大学里的人员进行管理。大学里的人员主要由学生,教师(教课),教员(不教课)和在职进修教师(既当学生又当教师)组成,各类人员均有姓名,电话和地址等信息,学生还有专业信息,在职另有所在部门及工资信息,教师另有教授课程信息,在职进修教师具备以上各类人员的信息。4、生成容器类RQ,提供成员函数calTJ()计算容器的体积,定义calTJ()为纯虚数,生成LFT类表示立方体,数据成员A表示立方体的边长,提供成员函数calTJ()计算立方体的体积;生成长方体类CFT,数据成员A,B,C分别表示长方体的长,宽和高,提供成员函数calTJ()计算长方体的体积,类CFT和类LFT都继承类RQ。5、在一个公司里,主管和员工的月工资计算方法规定如下:主管的每月工资固定为4200元;员工的每月工资与加班的时间有关,计算方法是每加班一小时50元,固定工资为2500元。编程实现每个人的月工资。要求利用纯虚函数实现。6、编程计算圆形(Circle)和正方形(Square)的周长和面积。要求定义一个抽象类,其中包括求周长(per)和面积(area)的纯虚函数,然后在此基类的基础上,派生出圆形类和正方形类,主函数通过基类的指针调用各派生类的函数。1、#include #include using namespace std;class Personpublic:Person(string n,int a) Name=n; Age=a; Person() void set(string n,int a) Name=n; Age=a; void show() coutName Ageendl; private:string Name;int Age;class Student:public Personpublic:Student(string n,int a,string nu):Person(n,a) Num=nu; Student() void set(string n,int a,string nu) Person:set(n,a); Num=nu; void show() Person:show(); coutNumendl; private:string Num;class CollegeStudents:public Studentpublic:CollegeStudents(string n,int a,string nu,string s):Student(n,a,nu) Speciality=s; CollegeStudents() void set(string n,int a,string nu,string s) Student:set(n,a,nu); Speciality=s; void show() Student:show(); coutSpecialityendl; private:string Speciality;int main()Person p(zhang,21);Student s(li,22,1101);CollegeStudents cs(wang,25,3215,Computer);p.show();s.show();cs.show();return 0;2、#includeclass B0public:int a;void display()coutB0:a=aendl;class B1:virtual public B0public:int a;void display()coutB1:a=aendl; class B2:virtual public B0public:int a;void display()coutB2:a=aendl; class D1:public B1,public B2 public:int a;void display()coutD1:a=aendl; ; void main() D1 d; d.a=3; d.display(); d.B1:a=4; d.B1:display(); d.B2:a=5; d.B2:display(); d.B0:a=6; d.B0:display(); 3、#include#includeusing namespace std;class personpublic:person(string nam,string t,string a)name=nam;telephone=t;address=a;protected:string name,telephone,address;class student:virtual public personpublic:student(string nam,string t,string a,string i):person(nam,t,a)infor=i;protected:string infor;class staff:virtual public personpublic:staff(string nam,string t,string a,string ad,float w):person(nam,t,a)office=ad;wages=w;protected:string office;float wages;class teacher: public staffpublic:teacher(string nam,string t,string a,string ad,float w,string k):person(nam,t,a),staff(nam,t,a,ad,w),kcheng(k)protected:string kcheng;class zteacher:public teacher,public studentpublic:zteacher(string nam,string t,string a,string i,string ad,float w,string k):person(nam,t,a),student(nam,t,a,i),teacher(nam,t,a,ad,w,k)void show()coutname:nameendl;couttelephone:telephoneendl;coutaddress:addressendl;coutsuo xue zhan ye:inforendl;coutbu men di zhi:officeendl;coutwages:wagesendl;coutjiao shou ke cheng:kchengendl;void main()zteacher a(xuanlangfang,wangluogongcheng,jiaoqi201,2000,C+);a.show();4、#includeclass 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 RQprivate: 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()display();p=&C1;p-display();5、#includec

温馨提示

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

评论

0/150

提交评论