- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 继承与派生 本章学习要求: 继承的概念 单继承 多继承 8.1 继承与派生的概念 8.2 单继承 8.2.1 单继承的定义 8.2.2 继承方式以及派生类成员的访问 8.2.3 派生类对象的初始化和撤销 8.3 多重继承 8.3.1 多重继承的定义 8.3.2 成员名二义性 8.3.3 重复继承—虚基类 8.4 继承与组合 8.5 子类型 * * 由于种种原因(如技术和资源等方面的限制),对已有软件不加修改地直接使用往往是很困难的。因为,已有软件的功能与新软件所需要的功能总是有差别的,如果要复用就必须解决这个差别。解决这个差别的一种途径是修改已有软件的源代码,这不仅需要读懂源代码,而且修改过程可能引入新的错误,花费大量的调试时间。 继承机制是面向对象技术提供的另一种解决软件复用问题的途径。通过利用已有的类来定义新的类,即在定义一个新类时,先把一个或多个已有类的属性和功能全部包含进来,然后再给出新功能和属性的定义或对已有类的属性或功能重新定义。 在继承关系中存在两个类:一个是已经存在的类,称为基类(或称父类);另一个是将要被创建的新类,称为派生类(或称子类)。派生类拥有基类的所有成员,并可以定义新的成员或对基类的一些成员进行重新定义,从而使派生类呈现与基类不同的特征。类之间的继承关系可表示为如图所示。 图 继承关系图 派生类 基类 在定义单继承时,派生类只能有一个直接父类,其定义如下: class派生类名: [继承方式] 基类名{ 成员说明表 } 其中,派生类名为所新定义的派生类的名字,基类名是派生类的直接基类的名字,继承方式可以是public(公有)、private(私有)和protected(保护),它用于影响基类成员到派生类后访问权限,继承方式可以省略,默认为private。成员说明表用于给出在派生类中新增的成员。如: class Employee{ string name; //姓名 string offertel; //办公电话 string dept; //部门 string no; //工号 double string sal;//基本工资 double raiseSalary(){} //计算工资 }; class Programmer: public Employee{ string specialty; //技术特长 void Programming(); }; Programmer类对象内存影像 name offertel dept no sal specialty一 从基类继承的成员也可能会在两个地方被访问:①在派生类内部,派生类新增的函数可能会访问从基类继承的成员。②在派生类的外部,通过派生类对象来访问从基类继承的成员。对从基类中继承的成员的访问,受到其在派生类中的访问控制方式的限制,而基类的成员在派生类中的访问权限由该成员在基类中的访问控制方式和派生类的继承方式共同决定的。 继承方式在定义派生类时指出,如未指出,则默认为private。继承方式对基类成员在派生类中的访问控制方式的影响如表所示。 不可见 private private protected private private public 不可见 private protected protected protected protected public 不可见 private protected protected public public public 基类成员在派生类中的访问控制 继承方式 基类成员访问控制 表 继承方式对基类成员在派生类中的访问控制方式的影响 基类成员被继承到派生类后,其访问控制方式决定于其在基类中的访问控制方式和继承方式,如表8-1所示。在派生类外只能访问在派生类中访问控制为public的基类成员。即基类的pubic成员被public方式继承到派生类后,可以在派生类外部访问,其他都不可以。 在派生类中自动拥有基类的所有成员,但并不是所有的从基类继承的成员都能够被派生类中新增的成员访问。派生类的新成员只能访问基类中的public和protected成员,与继承方式无关。 1.派生类对象的初始化 在派生类对象中包含一个匿名的基类对象,在创建和初始化派生类对象时,系统按照一定的顺序进行:先初始化该匿名的基类对象,然后再初始化派生类自己的新增成员。 匿名基类对象的初始化由基类的构造函数来完成,派生类的构造函数会调用基类的构造函数来完成匿名基类对象的初始化,默认情况是调用基类无参数的构造函数,如果要调用其他带参数的构造函数,则必须在派生类构造函数的成员初始化列表中指出。派生类构造函数的一般格式为: 派生类名(构造函数
文档评论(0)