- 1、本文档共98页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C第11章继承与派生解读
第11章 继承与派生 面向对象程序设计4个主要特点 抽象 封装 继承:对现有的类重复利用 多态性:在继承的基础上,使程序设计更加简单化 关于软件重用(复用) 大多数工程都尽可能使用可以重用的部件 软件重用在以下层次中 代码 功能 模块或类 子系统 应用系统 C++提供的大量库函数是在功能级的重用 MFC、OLE、ActiveX是在类一级的重用 软件重用的含义 简单而言,就是以现成的程序模块为基础,实现新的应用系统 小型模块重用的示例 各种库函数 在类中包含另一个类的对象成员 重用的关注点: 现有的代码(界面)不需修改 能进行属性与方法的扩充:实现一些新的功能,但又不需从底层开发。 能以规范的、标准的设计进行扩充 在类定义中包含其它类的对象成员(对象组合):可以重用其它类定义的成员,但设计与使用没有统一的规范。 类的组合:在一个类中以另一个类的对象作为数据成员 子对象是“部件” 组合产生的新类对象“包含”子对象,因此 新类对象具有子对象的属性和功能 新类对象能增加新属性与新功能 新类对象不能“修改”子对象的功能 继承与派生的概念 继承就是在一个已存在的类的基础上建立一个新的类 已存在的类称为基类(base class)或父类(father class) 新建立的类称为派生类(derived class)或子类(son class) 子类继承了父类 父类派生了子类 派生类是基类的具体化 基类则是派生类的抽象 现实世界的例子 派生类继承了基类的所有数据成员和成员函数,并可以对成员作必要的增加或调整 一个基类可以派生出多个派生类,每一个派生类又可以作为基类再派生出新的派生类 继承的分类 单继承:一个派生类只从一个基类派生 多继承:一个派生类从多个基类派生 单继承 多继承 大学在册人员实例 派生类的声明方式 一般形式 class 派生类名: [继承方式] 基类名 { 派生类新增加的成员 } ; 继承方式 public(公有的、公用的) private(私有的) protected(受保护的) 默认为private(私有的) 派生类的构成 从基类接收成员 基类全部的成员接收过来(不包括构造函数和析构函数) 在设计时充分考虑到派生类的要求 调整从基类接收的成员 可以改变基类成员在派生类中的访问属性 同名覆盖原则 在声明派生类时增加的成员 派生类成员的访问属性 在讨论访问属性时,要考虑以下几种情况: 基类的成员函数访问基类成员 派生类的成员函数访问派生类自己增加的成员 基类的成员函数访问派生类的成员 派生类的成员函数访问基类的成员 在派生类外访问派生类的成员 在派生类外访问基类的成员 派生类成员的访问属性决定因素 基类成员所声明的访问属性 public、private(私有的)、protected 派生类所声明的对基类的继承方式 public、private(私有的)、protected 公有继承(public) 基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员在派生类不可访问。 派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员。 派生类的对象只能访问基类的public成员。 C++类继承的特征:接受父系原有的特征,并有所变化: 可控制地共享父类原有的成员(public、protected和private限定) 可定义新类的新特征(数据与函数成员) 例4:公有继承举例 #includeiostream.h class Location { public: void InitL(int xx,int yy); void Move(int xOff,int yOff); int GetX() {return X;} int GetY() {return Y;} private: int X,Y; }; void Location::InitL(int xx,int yy) { X=xx; Y=yy; } void Location::Move(int xOff,int yOff) { X+=xOff; Y+=yOff; } class Rectangle:public Location //派生类 { public: void InitR(int x,int y,int w,int h); int GetH() {return H;} int GetW() {return W;} private: int W,H; }; void Rectangle::InitR(int x,int y,int w,
文档评论(0)