第4章派生类与继承(免费阅读).ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
主讲:杨晓花 计算机工程系 第4章 派生类与继承 派生是面向对象程序设计的一个重要特性,它允许在既有类的基础上创建新的类,新类可以从一个或多个既有类中继承函数和数据,而且可以重新定义或加进新的数据和函数,从而形成类的层次和等级。 既有类称为基类或父类,在它的基础上建立的新类称为派生类、导出类或子类。 4.1 派生类的概念 4.2 派生类对象的创建与撤销 4.3 虚基类 4.1 派生类的概念 一、为什么要使用继承 简单的汽车分类层次图: 最高层(基类):是最普遍、最一般的。 低层(派生类):比它的上一层更具体,并且含有高层的特性(继承),同时也与高层有细微的不同。 继承性是程序设计中一个非常有用的、有力的特性,它可以让程序员在既有类的基础上,通过增加少量代码或修改少量代码的方法得到新的类,从而较好地解决了代码重用的问题。 二、派生类的声明 一般格式: class 派生类名:派生方式 基类名{ //派生类新增的数据成员和成员函数 }; 如: class employee:public person{ char department[20]; float salary; public: //… }; 派生方式 私有派生 class employee:private person{ //… }; 基类中的私有成员?派生类中无此成员 基类中的公有成员?派生类中是私有的 例4.1 例4.2 公有派生 class employee:public person{ //… }; 基类中的私有成员?派生类中无 基类中的公有成员?派生类中是公有的 例4.3 三、保护成员的作用 私有成员在派生类中是无权直接访问的,只能通过调用基类中的公有成员函数的方式实现。 如果一定要直接访问基类中的私有成员,可以把这些成员说明为保护成员protected。一般格式: Class 类名{ [private:] 私有成员 protected: 保护成员 public: 公有成员 }; 1、不涉及派生时,保护成员与私有成员的地位完全一致。 例4.4 class samp{ int a; protected: int b; public: int c; samp(int n,int m){a=n;b=m;} int geta(){return a;} int getb(){return b;} }; void main() { samp obj(20,30); obj.a=11; //Error,私有成员 obj.b=22; //Error,保护成员 obj.c=33; //Ok coutobj.geta()‘ ‘obj.getb()endl; //Ok } 2、以公有派生时:基类中的保护成员?在派生类中仍是保护的 例4.5 3、以私有派生时:基类中的保护成员?在派生类中是私有的。例4.6 类的继承访问特性 分析如下三个类的访问权限,并回答问题。 问题如下: 派生类B中的成员函数f2( )能否访问基类A中的成员f1( )、i1 和j1? 派生类B的对象b能否访问基类A中的成员f1( )、i1、j1? 派生类C中的成员函数f3( )能否访问基类B中的成员f2( ) 、i2和j2?能否访问间接基类A中的成员f1( )、i1和j1? 派生类C的对象c能否访问直接基类B中的成员f2( )、i2和j2?能否访问间接基类A中的成员f1( )、i1和j1? 从如上问题中得出什么结论? 解: 可以访问f1( )、 j1;不可以访问i1。 可以访问f1( ) ;不可以访问i1 和j1 。 可以访问直接基类B中的f2( )、 j2以及间接基类A中的f1( )、 j1,不可以访问i2和i1。 可以访问直接基类A中的f2( )以及间接基类B中的f1( ),其他都不可以访问。 在公有继承时,派生类的成员函数可以访问基类中的公有成员和保护成员;派生类的对象仅可以访问基类中的公有成员。 单继承与多继承概念 单继承 派生类只从一个基类派生。 多继承 派生类从多个基类派生。 多重派生 由一个基类派生出多个不同的派生类。 多层派生 派生类又作为基类,继续派生新的类。 多继承时派生类的声明 class 派生类名:继承方式1 基类名1,继承方式2 基类名2,... { 成员声明; } 例4-10:多继承 class A{ public: void setA(int x){ a=x;

文档评论(0)

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

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

1亿VIP精品文档

相关文档