下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、WORD格式可编辑第七章派生与继承1.单选题( 1)下列关于继承的描述中,错误的是( B)。A继承是重用性的重要机制B C+语言支持单重继承和双重继承C继承关系不是可逆的D继承是面向对象程序设计语言的重要特性( 2)下列关于基类和派生类的描述中,错误的是(C)。A一个基类可以生成多个派生类 B基类中所有成员都是它的派生类的成员 C基类中成员访问权限继承到派生类中不变 D派生类中除了继承的基类成员还有自己的成员( 3)下列关于派生类的描述中,错误的是( D)。A派生类至少有一个基类 B一个派生类可以作另一个派生类的基类 C派生类的构造函数中应包含直接基类的构造函数 D派生类默认的继承方式是 pu
2、blic( 4)派生类的对象可以直接访问的基类成员是(A)。A公有继承的公有成员 B保护继承的公有成员C私有继承的公有成员 D公有继承的保护成员( 5)下列描述中,错误的是( D)。A基类的 protected 成员在 public 派生类中仍然是 protected 成员B基类的 private 成员在 public 派生类中是不可访问的C基类 public 成员在 private 派生类中是 private 成员D基类 public 成员在 protected 派生类中仍是 public 成员( 6)派生类构造函数的成员初始化列表中,不能包含的初始化项是(B)。A基类的构造函数 B基类的子
3、对象C派生类的子对象 D派生类自身的数据成员( 7)下列关于子类型的描述中,错误的是( B)。A在公有继承下,派生类是基类的子类型B如果类 A是类 B的子类型,则类 B 也是类 A 的子类型C如果类 A 是类 B 的子类型,则类 A 的对象就是类 B 的对象 D在公有继承下,派生类对象可以初始化基类的对象引用 ( 8)下列关于多继承二义性的描述中,错误的是(D)。A一个派生类的多个基类中出现了同名成员时,派生类对同名成员的访问可能出现 二义性B一个派生类有多个基类,而这些基类又有一个共同的基类,派生类访问公共基类 成员时,可能出现二义性C解决二义性的方法是采用类名限定D基类和派生类中同时出现同
4、名成员时,会产生二义性2多重继承与单一继承的区别是什么? 答:派生类只有一个基类的称为单一继承。单一继承的定义格式为:class 派生类名 : 继承方式 基类名 派生类中新成员定义派生类有两个或两个以上的基类称为多重继承。 多重继承的定义格式为:class 派生类名 : 继承方式 1基类名 1,继承方式 2基类名 2,, 继承方式 n基类名 n派生类中新成员定义3继承有哪三种继承方式,各自有何特点? 答:继承方式主要表示派生类继承基类时采用的继承方式,主要有三种,即公有继承、私有 继承和保护继承。( 1 )公有继承( public )。 公有继承的特点是基类的公有成员和保护成员作为派生类的成员
5、时,它们都保持原有的 状态,而基类的私有成员仍然是私有的。( 2 )私有继承( private ) 私有继承的特点是基类的公有成员和保护成员作为派生类的私有成员,并且不能被这个 派生类的子类访问。( 3 )保护继承( protected ) 保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能 被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。2. 在定义派生类的过程中,如何对基类的数据成员进行初始化? 答:由于基类在派生类中通常是隐藏的,所以依序通过调用基类的构造函数来设定基类的数 据成员的初值。它的格式为 派生类名 (形参表):基类 1(参数表),基类 2
6、(参数表) 对象成员 1(参数表),对象成员 2(参数表) ,3. 什么是赋值兼容规则?赋值兼容规则的实质是什么?试举例说明。答:赋值兼容规则是指,对于共有派生类来说,可以将派生类的对象赋值给其基类。它实质 上就是基类对象的内存空间和派生类对象中基类拷贝的内存空间引用的兼容。4. 什么是虚基类?它的作用是什么? 答:虚基类不是指基类是虚的,而是指在派生类中指定的基类是虚继承的方式。使用虚基类 的目的是在多重派生中使用共有基类在派生类中只有一个拷贝从而解决有多个基类拷贝所 产生的二义性问题。5. 分析下列程序的运行结果。#include<iostream.h>classAprivat
7、e:inta;public:A(inti=0)a=i; voidshow()cout<<"a="<<a<<endl; ;classBprivate:intb;public:B(inti=0)b=i;voidshow()cout<<"b="<<b<<endl; ;classC:publicA,publicBprivate:intc;public:C(inti=0,intj=0,intk=0):A(i),B(j)c=k;voidshow()A:show();B:show();cout&l
8、t;<"c="<<c<<endl;voidmain()Bb(12);b.show();Cc1,c2(30,40),c3(70,80,90);c1.show();c2.show();c3.show();c2.B:show();答:程序运行结果:b=12a=0b=0c=0a=30b=40c=0a=70b=80c=90b=40分析:( 1 )本程序是多重继承的程序,类C 继承了类 A 和类 B 的数据成员。( 2)在主程序中,分别对类 C的对象 c1、 c2、 c3 赋不同的值,则对类 A和类 B数据成员的 赋值也不一样。6. 分析下列程序的运行结果
9、。#include<iostream.h>classBase1public:Base1(inti)cout<<" 调用基类 Base1 的构造函数 :"<<i<<endl;classBase2public:Base2(intj)cout<<" 调用基类 Base2 的构造函数 :"<<j<<endl;classA:publicBase1,publicBase2public: A(inta,intb,intc,intd):Base2(b),Base1(c),b2(a),b1
10、(d)cout<<" 调用派生类 A 的构造函数 :"<<a+b+c+d<<endl; private:Base1b1;Base2b2;intmain()Aobj(1,2,3,4);答:调用基类 BASE1的构造函数 :3调用基类 BASE2的构造函数 :2调用基类 BASE1的构造函数 :4 调用基类 BASE2构造函数 :1 调用派生类 A 的构造函数 :107. 分析下列程序的运行结果。#include<iostream.h> classApublic:A(constchar*s)cout<<s<<
11、;endl;A();classB:virtualpublicApublic:B(constchar*s1,constchar*s2):A(s1) cout<<s2<<endl; classC:virtualpublicApublic:C(constchar*s1,constchar*s2):A(s1) cout<<s2<<endl; classD:publicB,publicCpublic:D(constchar*s1,constchar*s2,constchar*s3,constchar*s4):B(s1,s2),C(s1,s3),A(s1)c
12、out<<s4<<endl;intmain()D*ptr=newD("classA","classB","classC","classD");deleteptr;答:classAclassBclassCclassD8. 有人定义一个教师类派生一个学生类。他认为“姓名”和“性别”是教师、学生共有的 属性,声明为 public ,“职称”和“工资”是教师特有的,声明为 private 。在学生类中定义 特有的属性“班级”和“成绩”。所以有classteacherpublic:charname20
13、;charsex;/,Private:chartitle20;doublesalary;classstudent:publicteacher/,private: chargrade20;intscore; 你认为这样定义合适吗?请做出你认为合理的类结构定义。答: 不合适,这样导致数据冗余。合理的结构是提取它们共有的数据和操作定义一个基类,然后 分别定义 teacher 和 student 作为派生类。classpersonprotected: charname20;charsex;/,;classteacher:publicteache/,private:chartitle20;doubles
14、alary;classstudent:publicteacher/,private:chargrade20;intscore;9. 定义一个描述坐标位置的类 location ,从 location 派生出正方形类 square ,在正方形类 中将 location 类作为正方形的起始点,并求正方形的周长和面积。答:#include<iostream.h>classlocationprotected:intx,y;public:location(inta=0,intb=0)x=a;y=b;classsquare:publiclocationprivate:intlen;intgir
15、th;intarea;public:square(intx,inty,intt):location(x,y)len=t;voidset();voidshow();voidsquare:set()girth=4*len;area=len*len;voidsquare:show()cout<<" 正方形的坐标点为: "<<x<<","<<y<<endl;cout<<" 正方形的周长为: "<<girth<<endl;cout<<&q
16、uot; 正方形的面积为: "<<area<<endl;voidmain()squarem(10,10,5);m.set();m.show();Line ,10. 把定义平面直角坐标系上的一个点的类Point 作为基类,派生出描述一条直线的类再派生出一个矩形类 Rect 。要求成员函数能求出两点间的距离,矩形的周长和面积等。设 计一个测试程序,并构造完整的程序。答:#include<iostream>#include<cmath>usingnamespacestd;classPointpublic:Point(intx=0,inty=0
17、)this->x=x;this->y=y;public: intx,y;classLine:publicPoint public:Line(intx1=0,inty1=0,intx2=0,inty2=0) :a(x1,y1),b(x2,y2) doubleLength()ints=a.x-b.x;intt=a.y-b.y; returnsqrt(s*s+t*t);private:Pointa,b;classRect:publicLinepublic:Rect(intx1,inty1,intx2,inty2):l1(x1,y1,x1,y2),l2(x1,y1,x2,y1)/x1,y1
18、 是矩形左下角的坐 标, x2,y2 是矩形右上角的坐标 doubleSumLength()/cout<<" 矩形的周长是 "<<<<endl; return(l1.Length()+l2.Length()*2;doublesquare()/cout<<" 矩形的周长是 "<<<<endl; returnl1.Length()*l2.Length();private:Linel1,l2;voidmain()Lineline(0,0,10,0);cout<<" 这
19、条线段的长度为: "<<line.Length();Rectrect(0,0,10,10);cout<<" 矩形的周长是 "<<rect.SumLength()<<endl;cout<<" 矩形的周长是 "<<rect.square()<<endl;11. 假设某销售公司有销售经理和销售员工,月工资的计算办法是:销售经理的固定月薪为8000 元并提取销售额的 5/1000 作为工资;销售员工只提取销售额的 5/1000 作为工资。编一 程序,定义一个基类 Emp
20、loyee ,它包含三个数据成员 number、 name和 salary ,以及用于 输入编号和姓名的构造函数。由 Employee 类派生 Salesman 类,再由 Salesman 类派生 Salesmanager 类。 Salesman 类包含两个新数据成员 commrate 和 sales ,还包含用于输入销 售额并计算销售员工工资的成员函数 pay 和用于输出的成员函数 print 。Salesmanager 类包 含新数据成员 monthlypay ,以及用于输入销售额并计算销售经理工资的成员函数pay、用于输出的成员函数 print() 。在 main 函数中,测试你的类结构
21、,求若干个不同员工的工资。 答:#include<iostream> usingnamespacestd;classemployeepublic:employee()cout<<" 编号: "cin>>number;cout<<" 姓名: "cin>>name;salary=0;protected: charnumber5;charname10;doublesalary;classsalesman:publicemployeepublic:salesman()commrate=0.005;voi
22、dpay()cout<<name<<" 本月销售额: "cin>>sales;salary=sales*commrate;voidprint()cout<<" 销 售 员 : "<<name<<"编号 : "<<number<<" 本 月 工 资 : "<<salary<<endl;protected:doublecommrate;doublesales;classsalesmanager:pub
23、licsalesmanpublic:salesmanager()monthlypay=8000;commrate=0.005;voidpay()cout<<name<<" 本月部门销售额: "cin>>sales;salary=monthlypay+sales*commrate;voidprint()cout<<" 销售经理: "<<name<<" 编号: "<<number<<" 本月工资: "<<sala
24、ry<<endl; private:doublemonthlypay;intmain()salesmanobj1;obj1.pay();obj1.print();salesmanagerobj2;obj2.pay();obj2.print();12. 编写一个程序实现那一个班级学生的学期成绩管理。个人信息类 Person 的数据成员有:姓名,年龄,性别;课程类 Course 的数据成员有:课 程名,学分,成绩;学生类 Student 从 Person 类派生,并增加数据成员:学号, Course 对象数据成员数组(大 小为 8),总成绩,总学分和平均成绩;班级类 Class 类的数
25、据成员有: Student 类对象成员数组(大小由构造函数确定),班号,班 级人数等。要求:( 1)本班级 Class 类的对象成员数组需要在构造函数中用new 动态分配内存空间,在析构函数中释放。在类 Class 中添加成员函数 Seek,通过学号查找并输出该学生的全部信息。( 2)构造三个学生的数据,每个学生都有三门课程的成绩,输入并显示这些数据。( 3)根据类的需要添加适当的其他成员,编写完整的程序并测试。答:#include<iostream.h>#include<cstring.h>classPersonpublic:Person(char*name,inta
26、ge,charsex='M')strncpy(this->name,name,20);this->age=age;this->sex=sex;voidshow()cout<<" 学生的名字是: "<<name<<endl;cout<<" 学生的年龄是: "<<age<<endl;cout<<" 学生的性别是: "<<sex<<endl;private:charname20;intage;char
27、sex;classCoursepublic:Course()cout<<" 请输入课程名,学分和分数 "<<endl; cin>>coursename>>credit>>score;public: charcoursename20; floatscore; floatcredit;classStudent:Personpublic:Student(char*name="NULL",intage=0,charsex='M',char *no="0"):Person(name,age,sex),Course() strncpy(this->no,no,20); doubleMscoresum() scoresum=0;for(inti=0;i<2;i+)scoresum+=Couri.score;returnscoresum;doubleMcreditsum()creditsum=0;for(inti=0;i&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厂房强电安装合同范本
- 双向销售采购合同范本
- 2026年企业人力资源管理师之四级人力资源管理师考试题库300道(达标题)
- 劳动合同续约补充协议
- 2026年一级注册建筑师之建筑结构考试题库300道及参考答案【轻巧夺冠】
- 前期物业管理协议合同
- 代工装配加工合同范本
- 2026年南京机电职业技术学院单招职业技能考试题库附答案
- 2026年云南旅游职业学院单招职业技能考试题库含答案
- 各种鱼苗买卖合同范本
- 宝乐迪量贩式KTV加盟流程
- 大学英语四级常考同义替换120组
- GB/T 17696-1999声学测听方法第3部分:语言测听
- GB/T 11060.8-2020天然气含硫化合物的测定第8部分:用紫外荧光光度法测定总硫含量
- 计算方法引论-第十一章
- 新修订《黄河保护法》PPT
- 全科医师转岗培训试题
- 插秧机课件讲义整理
- DB11- 996-2013-城乡规划用地分类标准-(高清有效)
- 钻井井场及钻前道路施工规定
- 万豪国际酒店委托管理合同
评论
0/150
提交评论