C++课件第12章继承和派生解读.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C课件第12章继承和派生解读

目 录 第1章 C++概述 第2章 数据类型、运算符和表达式 第3章 简单的输入/输出 第4章 C++的流程控制 第5章 函数 第6章 编译预处理 第7章 数组 第8章 结构体、共同体和枚举类型 第9章 指针和引用 第10章 类和对象 第11章 类和对象的其他特性 第12章 继承和派生 第13章 多态性 第14章 输入/输出流 第15章 模板 第12章 继承和派生 1.对于公有派生,基类的protected成员在派生类中依然保持protected属性。 2.对于私有派生,基类的protected成员在派生类中变成了private成员,此时基类的protected成员就再也无法在派生类的派生类中被直接访问了。在继承或派生链中,一旦出现私有继承,则父类的成员的“类内直接访问特性”就无法在后面的派生中传递下去。 3.对于保护派生,基类的protected成员在派生类中依然保持protected属性,此时情况与公有派生类似。 类中protected成员的优点是:既可以在本类中实现数据的隐藏(在类外不可被直接访问),又可以将其类内直接访问特性传递到派生类中(在派生类中可直接访问)。但private成员只能实现本类中的数据隐藏,而不能将其类内直接访问特性传递到派生类中。 class C: public A, public B //公有继承 A 和 B { int y; public: void SetAx(int a) { A::x=a;}//对类A中的x置值 void SetBx(int a) { B::x=a;}//对类B中的x置值 void Sety(int b) { y=b; } int Gety( ){ return y; } }; void main( ) { C c1; c1.SetAx(35); c1.SetBx(45); c1.Sety(300); coutY=c1.Gety( )endl; } 例12.6 部分代码,解决访问冲突 C A B 注意:如何解决冲突 (访问二义性)。 当把派生类作为基类,又派生出新的派生类时,这种限定作用域的运算符不能连续嵌套使用,如下形式的使用方式是不允许的: 类名1 :: 类名2 :: 类名3… :: 成员名 [例12.7] 见 “第12章 继承和派生(例子).doc” 如何解决多层继承中的冲突,请看下例: 由于C++是通过作用域运算符来解决访问二义性问题,因此规定任一基类在派生类中只能被直接继承一次,否则会造成成员名访问的冲突。例如: class A { public: float x; ... }; class B: public A, public A //错误的 {...... }; B类的定义是错误的,因为如果直接从A类继承两次,通过作用域运算符就无法解决访问二义性问题。 12.5.2 支配规则 [例12.7] 支配规则示例 见 “第12章 继承和派生(例子).doc” 问题:类C 有几个数据成员。 基类和派生类出现同名成员时, 派生类成员访问优先----支配规则 * * 第一部分 面向过程的程序设计 第二部分 面向对象的程序设计 12.1 继承的基本概念 12.2 单一继承 12.3 多重继承 12.4 基类成员的初始化 12.5 二义性和支配规则 12.6 虚基类 12.7 访问基类成员和访问对象成员的成员 12.8 赋值兼容 第 12 章 继承和派生 继承提供了在已有类的基础上开发出新类的机制, 可以节省重复代码的编写工作,是软件重用的基础。 B A A 派生类是对基类的扩充 12.1 继承的基本概念 已知一个类A,对A类加以扩展,即增加一些属性和行为,构成一个新类B,此时B类将A类已有的属性和行为继承下来。称类 B 继承了 A ,或称类 A 派生了 B 。 A :父类,基类 BaseClass B :子类,派生类 DerivedClass 在校人员类 学生类 职工类 ( 属性:姓名,年龄,身高 ) 增加属性: 学号 成绩 增加属性: 部门 工资 单一继承 多重继承 圆柱体类 圆类 高度类 组合 (属性: 圆心坐标,半径) (属性: 高度) 属性: 圆心坐标,半径 ,高度 在C++中,有两种继承方式:单一继承和多重继承。 12.2 单一继承 定义派生类的一般格式: class 派生类名: 继承方式 基类名

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档