C++面向对象程序设计双语教程(第3版)-参考答案【ch06】Iaheritance.docx

上传人:太** 文档编号:97922096 上传时间:2024-07-08 格式:DOCX 页数:18 大小:49.50KB
返回 下载 相关 举报
C++面向对象程序设计双语教程(第3版)-参考答案【ch06】Iaheritance.docx_第1页
第1页 / 共18页
C++面向对象程序设计双语教程(第3版)-参考答案【ch06】Iaheritance.docx_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《C++面向对象程序设计双语教程(第3版)-参考答案【ch06】Iaheritance.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计双语教程(第3版)-参考答案【ch06】Iaheritance.docx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Chapter 6 Inber i tance1. Answer the fol lowing questions.(1) If a base cI ass has a constructor with parameters but no defau11 vaIues, then der i ved cI ass neednt have a constructor with arguments exp I i c i 11y. True or fa Ise. If fa Ise, pI ease give reasons.with the same name, which member fun

2、ction(2) If a base cI ass and a der i ved cI ass both i ncIude a member funct i on wi I I be cal led by an objectof the der i ved cI ass, assumi ng used.(3) Assume a Derv cI ass that i s object of cI ass Derv Iocated i n a. pub I i c members of Derv.b. protected members of Derv.c. pr i vate members

3、of Derv.d. pub I i c members of Base.e. protected members of Base.f. pr i vate members of Base.(4) A cI ass h i erarchythe scopepr i vateIyresoIut i on operator i s notder i ved from cI ass Base. Anthe ma i n funct i on can accessa.b.C.d.shows the descr i bes descr i bes shows thesame re I at i onsh

4、 i psas an organ i zat i on chart.“has a re I at i onsh i ps.“is a k i nd of re I at i onsh i ps.same re I at i onsh i ps as a fami ly tree. Suppose that the der i ved cI ass has a member object of another cI ass. In what sequence i s an object of the der i ved cI ass constructed?(6) What i s compos

5、 i t i on (7) Exp lain of a c I ass.(8) Supposethe mean i ng of i nher i tance? What i s the d i fference between and imher itance?the d i fference between the pr i vate and protected members a base cI ass and a der i ved cI ass both def i ne a funct i on of the same name and a der i ved c I ass obj

6、ect i nvokes the funct i on. What method i s caI Ied?(9) Consider the fol lowing inher itance hierarchy:二眼s亮仁至篌:理裁篌总港港 protected:逑施帝世:寻确游勰; 豫慧簧慧m 面蔡 B: public A加考毋好落(a) How many data members does B have? Wr ite out these data members.17 74 5 6/( /( 7(How many data members does cI ass Line have? Writ

7、e out them.Def i ne the constructor of cI ass L i ne.Def i ne funct i on Display i n cI ass L i ne. (Hint: the funct i on d i spI ays i nformat i on of data members i n cI ass L i ne.)(7) Write the ma i n funct i on to test cI ass L i ne.(1)在UML图中,类用一个矩形框表示,矩形框内部包含类的名称。类之间的关系用连 线表示,主要有聚合、关联、继承和依赖关系。

8、- 聚合关系用空心菱形和实线表示,表示类之间是包含关系,表示一个类有包含关系的 另一个类的实例,但两者之间的生命周期可以是独立的。- 关联关系用实线表示,表示类之间有关联,一个类可以引用另一个类的对象。- 继承关系用一个箭头实线表示,表示类之间的继承关系,子类继承父类的属性和方 法。- 依赖关系用虚线箭头表示,表示一个类依赖于另一个类,即一个类的实现依赖于另一 个类。(2)在类图中,操作符#、-和+的含义如下:- 表示protected访问修饰符,表示成员是受保护的,只能在类内部和子类中访问。- 表示private访问修饰符,表示成员是私有的,只能在类内部访问。- 表示public访问修饰符,

9、表示成员是公开的,可以在类的任何地方访问。(3)类别行(Abstract Class)是指只包含成员函数声明而不包含实现的类。它是一种 抽象的类,不能被实例化,只能被继承,用来表示一类对象的通用行为和属性。(4)类Line有多少个数据成员取决于图中的具体定义。在图6T4中没有展示Line类 的具体成员,所以无法确定。(5)构造函数是用来创建对象并初始化对象成员的方法。根据具体需求,可以定义类 Line的构造函数。(6)在类行中定义什么是不清楚的,请提供更多上下文描述。6. Dees i gn and imp Iement a mini-payrolI system including thre

10、e different peopIe: Teacher, Student and TeachAss i stant. Th i s c I ass h i erarchy i s descr i bed graph i caI Iy i n F i gure 6-15.Figure 6-15 The class hierarchy diagram(1) CI ass Person has data members: number, name and month I y sa I ary and member funct i ons to caIcuI ate the month Iy saI

11、ary and to display a I I i nformat i on.(2) CI asses Teacher and TeachAss i stant both have another data member- I eve I.(3) The caIcuI at i on of the month Iy saI ary i s def i ned as foI Iows:The Teacher * s month Iy saI ary i s determined by 50 Yuan per work i ng hour and 1500 Yuan subs i dy.The

12、Student gets 300 Yuan subs i dy per month;The TeachAss i stant i s a part-time student and has a teachers benefts. The saI ary i s thestudents subs i dy, pI us an extra saI ary of 10 Yuan per work i ng hour.首先,我们创建一个名为Personnel的基类,其中包含编号、姓名和月薪的数据成员。 成员函数包括计算月薪和显示所有信息。pythonclass Personnel:def_init_(

13、self, id, name, monthly_salary):self, id 二 idself, name = nameself. monthly_salary = monthly_salarydef calculate monthly salary(self):return self. monthly_salarydef display_info(self):print (、编号:、self, id)print (、姓名:、self, name)print(、月 薪: self. calculate_monthly_salary()接下来,我们创建一个名为Teacher的子类,它从Per

14、sonnel派生。除了继承基类的数 据成员和成员函数外,教师还有一个级别的数据成员。我们在这个子类中添加一个特殊的计 算月薪的功能。pythonclass Teacher(Personnel):def _init_(self, id, name, monthly_salary, level): super (). init(id, name, monthly salary) self, level = leveldef calculate_monthly_salary(self):base_salary = super(). calculate_monthly_salary() return

15、base salary + base salary * (0 1 * self, level)最后,我们创建一个名为TeachingAssistant的子类,它从Personnel派生。与教师类 似,助教也有一个级别的数据成员,并添加特定的月薪计算方式。pythonclass TeachingAssistant(Personnel):def init(self, id, name, monthly_salary, level): super().init_(id, name, monthly_salary) self, level = leveldef calculate monthly sa

16、lary(self):base_salary = super(). calculate_monthly_salary () return base_salary + base_salary * (0.05 * self, level)现在,我们可以创建不同的教师、学生和教师助理的实例,并调用它们的成员函数来计 算月薪和显示信息。pythonteacher = Teacher (1, 张三 5000, 3)teacher, display info()assistant = TeachingAssistant (2, 李四 3000, 2) assistant. display_info()这样

17、,我们就实现了一个基于类层次结构的迷你工资制度,其中包括教师、学生和教师 助理。每个类都有自己特定的月薪计算方式,并且可以显示所有信息。你可以根据需要扩展 该类层次结构,并添加其他功能。7. Der i ve a cI ass cal led EmpIoyee2 from the EmpIoyee cI ass i n th i s chapter. Th i s new c I ass shou I d add a doub I e type data item cal led compensat i on, and a I so an enum type cal led per i od

18、to i nd i cate whether the empIoyee i s pa i d hour Iy, week Iy, or month Iy. You wi I I der i ve the Manager, Scientist, and Laborer cI asses from EmpIoyee2 i nstead of EmpIoyee. However, note that in many ci rcumstances it might be more in the spirit of OOP to create a separate base cI ass cal led

19、 Compensat i on and three new cI asses Manager2, Sc i ent i st2, and Laborer?, and use multiple i nher i tance to der i ve these three cI asses from the original Manager, Sc i ent i st, and Laborer cI asses and from Compensat i on. In th i s way, none of the original cI asses needs to be mod i f i e

20、d.pythonclass Employee2:def _init_(self, name, age, compensation, payment_type): self, name = name self, age = age self, compensation = compensation self. payment_type 二 payment_typedef get_info(self):return fName: self, name, Age: self, age), Compensation: self, compensation), Payment Type:self, pa

21、yment typedefcalculate_payment(self, hoursworked):if self. payment_type 二二 PaymentType. HOURLY: return self, compensation * hours_worked el if self, payment type = PaymentType. WEEKLY: return self, compensationelif self. payment_type =二 PaymentType. MONTHLY:return self, compensation / 4 # Assuming 4

22、 weeks in a monthclass PaymentType(Enum):HOURLY = Hourly WEEKLY = Weekly MONTHLY = Monthly、上述代码定义了一个Employee2类,该类具有姓名(name)、年龄(age)、补偿 (compensation)和支付类型(payment type)等属性。在Employee2类中,我们还定义了一个calculate_payment方法,该方法接受 hours_worked参数,并根据支付类型计算薪水。根据不同的支付类型,薪水计算方式可能 不同。8. Wr ite a program.(1) Def i ne

23、 a Veh i cIe cI ass that has a constructor with parameters and protected data members wheeIs (number of wheeIs) and we ight (we i ght of veh i cIe).(2) Class Car i s der i ved from VehicIe pr i vateIy and conta i ns the data member passenger_ Ioad (Iargest number of passengers).(3) CI ass Truck i s

24、der i ved from Veh i cIe pr i vateIy and conta i ns the data members passenger_ Ioad (Iargest number of passengers) and pay_ Ioad (Ioad capac i ty)(4) Test the three cI asses by us i ng the ma i n funct i on.、CPP#include ttinclude using namespace std;class Vehicle protected:int wheels;float weight;p

25、ublic:Vehicle (int w, float wt) : wheels (w), weight(wt) void display() cout Wheels: wheels endl;cout Weight: weight kg endl;);class Car : public Vehicle private:int passenger_load;public:Car(int w, float wt, int pl) : Vehicle(w, wt), passenger_load(pl) void display() Vehicle:display ();cout Passeng

26、er Load: passenger_load people endl;);class Truck : public Vehicle private:int passenger_load;float payload;public:Truck(int w, float wt, int pl, float pd) : Vehicle (w, wt), passenger load (pl), payload (pd) void display() Vehicle:display ();cout Passenger Load: passenger_load people endl;cout Payl

27、oad: payload kg endl;);int main () Car car (4, 1000. 0, 5);cout Car Details: ;car. display ();cout endl;Truck truck (8, 5000. 0, 2, 10000. 0);cout Truck Details: 500 else 情况较差 return fself. name的销售总额为total sales元,sales status) publications =while True:choice = input (请选择要添加销售记录的项目:图书【B】,杂志【M】,退出【Q】:

28、 if choice.upper() = Qbreakif choice, upper () not in B Mprint (无效的选择,请重试! continuepublication name = input (、请输入销售项目名称: sale amount = float (input (、请输入销售额: if choice, upper () = Bpublication =next (p for p in publications if p. name = pub1ication name), None)if publication:publication. add_sale(sa

29、le_amount)else:publication = Pub1i cat i on(pub1i cat i onname) publication. add_sale(sale_amount) publications. append(publication)else:publication = next (p for p in publications if p.name 二 pub1ication_name), None)if publication:publication, add sale(sale amount)else:publication = Pub1ication(pub

30、1ication_name) publication. add_sale(sale_amount) publications, append(publication)print (销售情况总结:for publication in publications: print(publication. get_sales()这个程序首先定义了一个Publication类,表示一个销售项目(图书或者杂志)。它有 一个name属性用于存储名称,一个 sales列表用于存储销售额。这个类有add_sale方 法用于添加销售记录,以及get_summary方法用于获取销售情况。在主程序中,我们通过一个无限循

31、环来添加销售记录。用户可以选择是图书还是杂志, 然后输入项目名称和销售额。程序会根据输入更新对应的销售项目,或者新建一个销售项目o 最后,程序会打印出销售情况总结,包括每个销售项目的名称和销售总额,以及销售情况是 否较好。(b) Wh i ch data members i n A are accessed i n B?(1)错误。如果基类有一个具有参数的构造函数且没有默认值,派生类必须通过显式参 数传递来调用基类的构造函数。否则,派生类无法正确地初始化基类的成员。(2)正确。如果一个基类和派生类都有一个同名的成员函数,并且我们使用派生类的对 象来调用该函数时,派生类的成员函数优先被调用。这是

32、因为派生类继承了基类的成员函数, 并且派生类的成员函数具有更高的优先级。(3)在主函数中,类Derv的对象可以访问:a. Derv的公共成员。d.基类的公共成员。它们可以通过对象名称来访问,类名可选。但是,类Derv的对象无法直接访问受保护的Derv 和基类成,以及Derv的私有成员和基类的受保护或私有成员。只有派生类内部才能直接访 问受保护和私有成员。(4) a.显示与组织结构图相同的关系。这是指类层次结构中的父子关系,父类表示更泛化 的概念,子类表示更具体的概念,类似于组织结构图中的上下级关系。b.描述了has a关系。这是指类层次结构中的关联关系,一个类可以拥有另一个类的对象 作为其成员

33、变量,表示一个对象包含另一个对象,并且能够通过该关系进行访问。c.描述了是一种的关系。这是指类层次结构中的继承关系,子类是父类的特殊情况或者 更具体的实现,表示一个类是另一个类的一种类型或者子集。d.显示了与家谱相同的关系。这是指类层次结构中的继承关系,类似于家谱中的祖先和后 代关系,每个个体都有一个父类以及可能有多个子类或后代类。(5)如果派生类具有另一个类的成员对象,那么在构造派生类对象时,先构造基类对象,然 后再构造成员对象。(6)继承是面向对象编程中的一个重要概念,它允许派生类继承基类的属性和方法。继承的 意义在于代码的重用和结构的扩展。通过继承,我们可以避免重复编写相似的代码,同时使

34、 代码更加模块化和易于维护。组成力与继承力之间的区别在于他们实现代码重用的不同。组成是通过创建其他类的对象作 为当前类的成员,可以根据需要选择不同的对象,实现灵活性。而继承则是通过派生类继承 基类的属性和方法,强调共性和层级关系。(7)类中的私有成员和受保护成员都是访问权限控制的一种方式。私有成员只能在当前类 中访问,不能被派生类或其他类访问。受保护成员可以在当前类和派生类中访问,但不能在 其他类中访问。具体区别在于:-私有成员:-只能在当前类的成员函数或友元函数中访问;-子类无法直接访问私有成员。-受保护成员:- 可在当前类的成员函数、友元函数和派生类的成员函数中访问;- 子类可以通过继承方

35、式访问受保护成员;- 子类的对象无法直接访问受保护成员。总之,私有成员主要用于实现封装性,受保护成员主要用于实现继承性。(8)当一个派生类对象调用一个同名函数时,会优先调用派生类中的函数。这是因为派生 类会继承基类的函数,但是如果派生类有自己定义的同名函数,就会覆盖基类的函数,从而 成为首选的调用方法。这个过程称为函数重写或函数覆盖。(9)略。2. Fi I I in the bIanks in each of the fol lowing:(1) A new cI ass i nher i ts propert i es from an ex i st i ng cI ass. So the

36、 re I at i onsh i p i s cal led .A new c I ass has an object of another c I ass as its member. So the re I at i onsh i p i s cal led. They are a I I ways of reus i ng ex i st i ng software to create new software.(2) When der i v i ng a cI ass ftom a base cI ass with pub Ii c i nher i tance, pub I i

37、c members of the base c I ass become members of the der i vedc I ass, and protected members of the base c I ass become membersof the der i ved c I ass.part of the c I ass cant be accessed by the der i ved cI ass.(3) The der i ved cI ass i s der i ved from one ex i st i ng cI ass. The ex i st i ng c

38、I ass i s cal led, The members of the base c I ass cannot be d i rectIy accessed by the der i ved_cI ass, but theand members can be accessed by the der i ved cI ass. When initial i z i ng the object of a der i ved c I ass, the constructor of the i s i nvoked f i rst.(4) To be accessed from a member

39、funct i on of the der i ved c I ass, the data or funct i ons i n the base c I ass must be pub I i c or略。class Employee ,.Public:,::;: .;.r y/constructor of class Employee , .:.name = theName;: nnn)ber =nb;:) .void printO ,cout name number J :*;class Y: protected X.;: int b;E:public; L。Y(intx, inty) a = x; b =y; :; -void main()Y objfiO, 2);:obj.printO; - - . . class baseClass public:baseClass(nt a): x(a) )void setX(mt a)x = a;Private: . . J- ,- mx;. .J . . . f, ., .- _ . . .;: , t t . , .:,:class dcrivedClass: private baseClass :.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁