- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 单继承类 本章内容: 6.1单继承类 6.2派生控制 6.3成员访问 6.4构造与析构 6.5父类和子类 6.6派生类的存储空间 6.1单继承类 继承是C++类型演化的重要机制,在保留原有类的属性和行为的基础上,派生出的新类可以有某种程度的变异。 通过继承,新类自动具有了原有类的属性和行为,因而只需定义原有类型没有的新的数据成员和函数成员。实现了软件重用,使得类之间具备了层次性。 通过继承和派生形成的类蔟,反映了面向对象问题域、主题等概念,形成类似Java的包。 6.1单继承类 点具有可见性,并具有x ,y坐标特性,可以移动。 6.1单继承类 派生类与基类:接受成员的新类称为派生类,如上例中的Point类;提供成员的类称为基类,如上例中的Location类。 基类是对若干个派生类的抽象,取了派生类的公共特征;而派生类是基类的具体化,通过增加属性或行为将基类变为某种更有用的类型。 派生类可以看作基类定义的延续,先定义一个抽象基类,该基类中有些操作并未实现;然后定义非抽象的派生类,实现抽象基类中未实现的操作。 6.1单继承类 C++通过多种控制派生的方法获得新的派生类: 添加新的数据成员和函数成员; 改变继承来的基类成员的访问权限; 恢复继承来的基类成员的访问权限; 重新定义同名的函数成员。 单继承与多继承: 派生类可以接受一个基类提供的数据成员和函数成员,也可以接受多个基类提供的数据成员和函数成员,这两种继承形式分别称为单继承和多继承。 多继承中的派生类有多于一个的基类,这时派生类将是所有基类行为的组合。 6.1单继承类 单继承的定义格式: class 派生类名:派生控制符基类名 { 派生类新定义成员 派生类重定义基类同名的函数成员 派生类声明恢复基类成员访问权限 }; 派生控制符指明派生类采用什么继承方式从基类获得成员,分为三种:private表示私有基类;protected表示保护基类;public表示公有基类。 注意区别派生控制和访问控制。 6.1单继承类 【例6.1、6.2】分别定义定位坐标LOCATION类和其派生的点POINT类。 6.1单继承类 6.1单继承类 6.1单继承类 说明: 用class声明的类的派生控制缺省为private,因此,声明class POINT: private LOCATION等价于声明class POINT: LOCATION。 派生类也可以用struct声明,不同之处在于:用struct声明的派生控制和访问权限缺省为public。 用union声明的类既不能作基类,也不能作任何基类的派生类。 当基类成员被继承到派生类时,该成员在派生类中的访问权限由派生控制决定。必须慎重的选择派生控制,它是面向对象程序设计的一个非常重要的环节 6.2派生控制 派生类可以有三种继承方式:公有继承public、保护继承protected、私有继承private。 公有继承:基类的公有成员和保护成员派生到派生类时,都保持原有的状态; 保护继承:基类的公有成员和保护成员派生后都成为派生类的保护成员; 私有继承:基类的公有成员和保护成员派生后都作为派生类的私有成员。 6.2派生控制 基类的私有成员同样也被继承到派生类中,构成派生类的一个组成部分,但对派生类函数成员不可见,派生类函数成员也不能访问。 若派生类函数成员要访问这一组成部分,则必须将其声明为基类的成员友元。 在派生类外部对其成员访问的权限: 对于新定义成员,按定义时的访问权限访问; 对于继承来的基类成员,取决于这些成员在派生类中的访问权限,与其在基类中定义的访问权限无关。 6.2派生控制 基类成员继承到派生类时,其访问权限的变化同派生控制有关。 假定访问权限和派生控制满足private protected public。如果基类成员的访问权限高于派生控制,则派生后基类成员在派生类中的访问权限和派生控制一样;否则,基类成员的访问权限保持不变。 6.2派生控制 基类LOCATION的成员 private成员: int x,y; public成员: int getx(); int gety(); void moveto( ); LOCATION( ); ~LOCATION( ); 6.2派生控制 若类POINT的派生控制为public,基类函数getx、gety派生后的访问权限仍为public,对类POINT来说这是合理的,因为,对类POINT来说则类需要这样的函数成员; 同上,若类POINT的派生控制为public,基类函数成员moveto派生后的访问权限为public,对类POINT来说则是不合理的,因为类POINT自己定义了public函数成员moveto。在以下程序中,主
文档评论(0)