如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
【学习目标】◇理解基类和派生类的概念◇掌握继承的概念和用法【重点与难点】◇重点:继承的概念和使用;第十一章继承和派生类11.1继承与派生的基本概念继承与派生的例子继承与派生的基本概念基类与派生类的关系:使用继承的必要性若组成一个系统的对象类均为互不包含的独立对象类,则将不可避免出现对象属性和行为的重复冗余,并且这种无层次关系的对象类既不符合现实世界的对象关系,也使对象类的定义、创建、使用和维护复杂化继承为代码重用和建立类定义的层次结构提供方便有效的手段。例如公司的管理软件设计中需要定义一个客户类Customer和雇员类Employee:classCustomer{private:charname[15];//姓名intage;//年龄charsex[8];//性别doubleincome;//收入public:voidprint();//输出状态};classEmployment{private:charname[15];//姓名intage;//年龄charsex[8];//性别chardepartment[20];//部门doublesalary;//工资public:voidprint();//显示输出状态};两个类的数据成员和成员函数有许多相同之处。显然,如此定义两个类,造成的代码重复是不可避免的。如果将Customer和Employee类定义中的相同成员抽取出来,定义一个新类Person:classPerson{private:charname[15];//姓名intage;//年龄charsex[8];//性别public:voidprint();//显示输出状态};Customer和Employee都定义为Person的派生类,那些在Person中已经定义的共同数据成员在Customer和Employee中就不需要再定义了,只需要在各自的定义中增加自己的独有数据成员;而成员函数print也只需要在Person所定义的行为操作基础上重新定义自己的行为操作。classCustomer:publicPerson{private:doubleincome;//收入public:voidprint();//显示输出状态};classEmployee:publicPerson{private:chardepartment[20];//部门doublesalary;//工资public:voidprint();//显示输出状态};显然通过继承可以从基类Person派生出一组具有层次结构的新类,构成一个公司管理系统的主要对象类型。例如:Person11.2派生类的定义派生类的定义与构成classCustomer:publicPerson{private:doubleincome;//新增加的数据成员“收入”public:voidprint();//重新定义基类的“显示状态”};从形式上比较,派生类定义与非派生类定义的差别仅在于定义首行中由“:”引出的派生表达式。其中:①派生方式:指明派生类继承基类成员的方式②基类名:指明派生类所继承的类。11.3派生类的构成11.3派生类的构成11.4派生类成员的访问属性11.4派生类成员的访问属性类内访问属性由于派生类的成员分为继承的基类成员和自身的新增成员,它们的类内访问属性是有所区别的。⑴基类成员的访问属性封装性所限定的类成员类外访问权限确定了基类成员在派生类定义中被访问的限定原则:私有成员:不允许被访问,与派生类从基类的继承方式无关。公有成员:允许被访问,与派生类从基类的继承方式无关。⑵新增成员的访问属性所有的新增成员均允许被访问,与新增成员被设定的访问属性(公有或私有)无关。类外访问属性派生类成员在类定义中声明的访问属性确定了派生类成员的类外访问属性:⑴基类成员的访问属性①私有成员:不允许被访问,与派生类从基类的继承方式无关。②公有成员:依据继承方式的不同,在基类中被设定的公有属性会发生不同的变化。·私有继承:基类的公有成员变为派生类的私有成员,因此在类外不允许被访问。·公有继承:基类的公有成员在派生类中仍保持公有属性,因此在类外允许被访问。⑵新增加成员的访问属性类成员在类定义中被声明的访问属性确定了类成员的类外访问属性。public派生:基类