- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章类的继承与派生.ppt
第 5 章 类的继承与派生 达尔文的进化论表明每个物种都在产生具有相似特征的后代。我们所说的类的继承(inheritance)也与此类似,当然没有生物界那样复杂与深奥。 继承性使用户可以连续建立或扩展自己或他人所建立的类而不受什么限制。从最简单的类开始,可以派生出越来越复杂的类。这既易于管理和跟踪,又使类本身变得很简单。当然这也得益于类的封装性。 可复用性是面向对象的程序设计中的常见术语,它指的是对一个类来说,可以在程序中直接对其实例进行操作、使用,或者以其作为基类产生部分或全部性质的子类。通过从基类中派生其他类,可有效地根据需要重复使用基类代码。。 在继承关系中,通常被继承的类称为基础类或父类,而经由继承产生的类,则称为子类或派生类。 继承关系是一种is-a关系,利用现有概念来定义一个新的概念。 C++Builder可视组件的层次关系 TObject Exception Tstream Tpersistent Tprinter Tlist Tgraphicobject Tgraphic Tcomponent Tcanvas tpicture tStrings Ttimer Tscreen Tmenuitem Tcontrol Tcommondialog Tgloblcomponent TgraphicControl TwinControl TcustomComboBox TButtonControl TcustomControl TscrollBar TcustomEdit TscrollingWinControl TcustomListBox TForm 1.类继承关系的语法形式: class 派生类名 :访问控制 基类名1,访问控制 基类名2,……访问控制 基类名n { 数据成员和成员函数说明 }; 类可以从一个基类或多个基类派生新类,若基类只有一个称单继承,而多个基类则称为多继承。 其中,“访问控制”是表示继承权限的关键字,称为访问描述符,它可以是;public公有继承、private私有继承和protected保护继承。若省略访问描述符,C++认为是私有继承。派生类不同的继承方式对基类成员有不同的访问权限。 2. 继承成员的访问控制规则: 如果类B继承类A,那么在类B的成员函数中可以使用类A的哪些数据成员与成员函数?其他类又可以使用类B中继承下来的哪些成员?这都是由类A中声明成员的访问控制方式以及类B继承类A时声明的继承访问控制方式两者共同决定的。继承成员的访问控制规则就是指派生类从基类中继承过来的成员的访问控制:派生类按指定的访问控制(继承访问控制)从基类中继承具有不同访问控制的成员,这些成员在派生类中,其访问控制发生了什么变化。程序员可以使用访问控制规则来设计基类与派生类,以权衡类的安全性与灵活性。 3. 不能被继承的成员 不是所有的C++成员都可以通过继承来传递的。主要有下面这些: ? 用户重载的构造函数。 ? 用户重定义的析构函数。 ? 用户定义的新操作符。 ? 用户定义的赋值符。 ? 友元关系。 派生类在实例化时自动调用基类的构造函数。尽管基类的构造函数被继承了,但它们只能在建立派生类时由编译器自动调用。基类的构造函数不能象其他成员函数那样显式地调用。 同样,析构函数是对象退出作用域时自动调用的,也不允许显式地调用析构函数。 3. 构造函数、析构函数的调用顺序 如果一个类没有声明任何构造函数和析构函数,C++编译器将为该类自动生成一个缺省的构造函数。缺省的构造函数不带任何形式参数,并且函数体为空。 在一个类实例化时,需要调用其构造函数。如果这个类是派生类,就还必须调用其基类构造函数。在C++语言中,基类构造函数的调用顺序是固定的。也就是先建立基类,然后再建立派生类。表现在调用构造函数上,就是先调用基类的构造函数然后再调用派生类的构造函数。 析构函数的调用顺序与构造函数的调用顺序正好相反。首先调用派生类的析构函数,然后再调用基类的析构函数。 实例化派生类时,经常需要使用基类的构造函数,而这些构造函数常常需要参数。可以用特定的表示法向基类构造函数传递参数。 如果基类的构造函数带有参数,那么在派生类构造函数实现时必须使用初始化列
文档评论(0)