网站大量收购独家精品文档,联系QQ:2885784924

《c封装继承多态.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《c封装继承多态

C++中的封装、继承、多态 封装(encapsulation): 就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成”类”,其中数据和函数都是类的 成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,特定的访问权限来使用类的成员。封装可以隐藏实现细节, 使得代码模块化。 ? ???????? 继承(inheritance):C++ 通过类派生机制来支持继承。被继承的类型称为基类或超类,新产生的类为派生类或子类。保持已有类的特性而构造新类的过程称为继承。在已有类的基础上新增自 己的特性而产生新类的过程称为派生。继承和派生的目的是保持已有类的特性并构造新类。继承的目的:实现代码重用。派生的目的:实现代码扩充。三种继承方 式:public、protected、private。 ???????? 继承时的构造函数:(1)、基类的构造函数不能被继承,派生类中需要声明自己的构造函数;(2)、声明构造函数时,只需要对本类中新增成员进行初始化,对 继承来的基类成员的初始化,自动调用基类构造函数完成;(3)、派生类的构造函数需要给基类的构造函数传递参数;(4)、单一继承时的构造函数:派生类 名::派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表) {本类成员初始化赋值语句;};(5)、当基类中声明有默认形式的构造函数或未声明构造函数时,派生类构造函数可以不向基类构造函数传递参数;(6)、若 基类中未声明构造函数,派生类中也可以不声明,全采用缺省形式构造函数;(7)、当基类声明有带形参的构造函数时,派生类也应声明带形参的构造函数,并将 参数传递给基类构造函数;(8)、构造函数的调用次序:A、调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右);B、调用成员对象的构造 函数,调用顺序按照它们在类中的声明的顺序;C、派生类的构造函数体中的内容。 ???????? 继承时的析构函数:(1)、析构函数也不被继承,派生类自行声明;(2)、声明方法与一般(无继承关系时)类的析构函数相同;(3)、不需要显示地调用基类的析构函数,系统会自动隐式调用;(4)、析构函数的调用次序与构造函数相反。 ???????? 同名隐藏规则:当派生类与基类中有相同成员时:(1)、若未强行指名,则通过派生类对象使用的是派生类中的同名成员;(2)、如要通过派生类对象访问基类中被覆盖的同名成员,应使用基类名限定:基类名::数据成员名。 ???????? 虚基类:作用:(1)、主要用来解决多继承时可能发生的对同一基类继承多次而产生的二义性问题;(2)、为最远的派生类提供唯一的基类成员,而不重复产生多次拷贝。 继承、组合:组合是将其它类的对象作为成员使用,继承是子类可以使用父类的成员方法。(1)、A继承B,说明A是B的一种,并且B的所有行为对A都 有意义;(2)、若在逻辑上A是B的“一部分”,则不允许B从A派生,而是要用A和其它东西组合出B;(3)、继承属于”白盒”复用,组合属于”黑盒”复 用。 ? 多态(Polymorphic)性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数。C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖或者称为重写。而重载则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,参数类型不同,或者两者都不同。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。 多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并产生代码,是静态的,就是说地址是早绑定的。而如果函数调用的地址不能在编译期间确定,需要在运行时才确定,这就是属于晚绑定。 封装可以使得代码模块化,继承可以扩展已存在的代码,它们的目的都是为了代码重用。而多态的目的则是为了接口重用。也就是说不论传递过来的究竟是哪个类的对象,函数都能够通过同一个接口调用到适应各自对象的实现方法。 最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象, 调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。如果没有使用虚函数的话,即没有利用C++多态性,则利用基类指针调用相应的函数的时候, 将总被限制在基类函数本身,而无法调用到子类中被重写过的函数。因为没有多态性,函数调用的地址将是一定的,而固定的地址将始终调用到同一个函数,这就无 法实现一个接口,多种方法的目的了。 纯虚函数是在基类中声明的虚函数,它在基类中没有定义, 但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原

文档评论(0)

lunwen1978 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档