- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C_4_继和派生
继承和派生
HYPERLINK \l 继承 §4—1 继承
HYPERLINK \l 单继承 §4—2 单继承
HYPERLINK \l 多继承 §4—3多继承
§4—1 继承
继承的含义
① 面向对象方法提供了从问题域到解域的自然映射
客观世界中的对象既有共性,也有个性,通过不同程度的抽象,形成了分类和层次结构
不同层次的类之间体现了概括(generalize)和特化(specify)关系
把高层次的类称为父类、超类和基类,把由该类特化产生的低层次类称为子类或派生类
派生类不仅具有基类的属性和行为,还具有自己特有的属性和行为
② 在不同类之间,除了概括和特化的关系外,还有聚合和分解关系
模块化的主要目的是实现软件的可复用性
从模块的角度看,继承是一种关键性的复用技术
③ 继承机制提供了一种充分利用现有资源的方法
它既体现了经济思想,又体现了谦虚精神:我比别人看得远,是因我站在巨人的肩上——牛顿
继承使得在创建新类时,只需说明新类与基类的区别,从而大量原有代码都可复用
④ 派生类是基类的具体化,是基类定义的延续
在多继承时,派生类也是基类的组合
继承的概念
1.基类
即父类,超类,是已存在的用来派生新类的类,是被继承的类
2.派生类
即子类,是由己存在的类派生出的新类,是继承其他类特性的类
3.单继承
即单重继承,每个派生类只有一个直接父类
是从一个基类派生的继承,形成类的层次,像一棵树
4.多继承
即多重继承,派生类可以有多个直接父类
是从多个基类派生的继承,形成一个有向无环图(DAG图)
5.类的层次结构
直接基类、间接基类、直接派生类、间接派生类
多层继承:一个基类可以是另一个基类的派生类
区别:多层继承和多重继承
派生类的定义
① 单继承
class 派生类名 : 继承方式 基类名
{派生类新定义成员;
};
② 多继承
class 派生类名 : 继承方式1 基类名1,继承方式2 基类名2,……
{派生类新定义成员;
};
继承方式
共有三种:
公有继承:public
保护继承:protected
私有继承:private 可缺省
继承方式
基类特性
派生类特性
公有继承public
publicprotectedprivate
publicprotected不可访问或不可见
保护继承protected
publicprotectedprivate
protectedprotected不可访问
私有继承(缺省)private
publicprotectedprivate
privateprivate不可访问
派生类不能继承基类的构造函数、析构函数和友元
1.基类的私有成员
只能被基类中的成员函数和友元函数访问,不能被其他函数访问
2.基类的保护成员
只能被基类及其派生类中的成员函数和友元函数访问
3.公有继承
派生类的对象可以访问基类中的公有成员
派生类的成员函数可以访问基类中的公有成员和保护成员
4.保护继承和私有继承
派生类的对象不能访问基类中的任何成员
派生类的成员函数可以访问基类中的公有和保护成员
5.私有继承
基类的公有和保护成员只能由直接派生类访问,无法再往下继承
§4—2 单继承
每个派生类只有一个直接基类,但每个基类可以有多个派生类
成员访问权限的控制
成员访问权限的调整
① 保护继承和私有继承将改变基类的公有和保护成员在派生类中的访问权限属性,若欲恢复其访问权限,则应作调整
② 方法:在派生类相应访问权限段中加以说明:基类名 :: 成员名;
③ 访问声明只能对变量或函数名,不能说明类型和参数
④ 基类成员被调整后,在派生类中的访问权限既不能扩大也不能减小,即不能改变所属权限段
⑤ 私有成员的访问权限不可调整,不能对私有段成员作访问声明
⑥ 重载函数只需一个声明即可,具有不同访问权限的重载函数名不能作访问声明
派生类的成员
(1)由两部分组成:
① 派生类从基类继承来的成员,其封装体叫基类子对象(匿名对象)
② 派生类自定义成员
(2)派生类对象的内存长度是基类数据成员和派生类自定义数据成员的内存空间之和
(3)基类的私有成员在派生类中存在,但不可访问,不可见
(4)静态成员受访问权限符的限制,但不受继承方式的制约
派生类可用“基类名 :: 静态成员名”访问基类的static成员
(5)派生类共有四种成员:
① 公有成员
② 保护成员
③ 私有成员
④ 不可直接访问的成员,它由基类私有成员派生而来的
(6)派生类直接访问基类私有成员的方法:
① 将基类私有段成员放于基类保护段
② 将派生类或派生类的成员函数声明为基类的友元
改造基类成员
(1)通过继承方式来控制基类成员在派生类中的访问权限
(2)对基类成员进行同名覆盖
① 在派生类中声明一个与基类成
文档评论(0)