《C++ 程序设计教程》第11章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章 多态性、虚函数 与运算符重载 本章内容提要 10.1 多态性的概念 10.2 虚函数 10.3 纯虚函数与抽象类 10.4 运算符重载 10.5 实现类型转换 上机实训 10.1 多态性的概念 10.2 虚函数 10.3 纯虚函数与抽象类 10.4 运算符重载 10.5 实现类型转换 多态性是指具有不同功能的函数可以使用同一个函数名,这样不同的对象就可以用同一个函数名调用不同内容的函数。 静态多态性在程序编译时系统就决定调用哪个函数,因此它又称为编译时的多态性。 动态多态性是指在程序运行过程中动态地确定操作所针对的对象,因此它又称为运行时的多态性。 例如:函数重载和运算符重载 通过虚函数(virtual function)实现 virtual 函数类型 函数名(参数列表) { 函数体 } 如果希望在基类中定义某个函数,而在派生类中重定义该函数(函数类型、函数名称、参数类型和参数个数完全相同),并且希望能够利用基类对象指针分别访问基类对象和派生类对象的同名函数,则应将基类中的该函数声明为虚函数,此时派生类中的同名函数也自动成为虚函数。 构造函数不能声明为虚函数,但析构函数可以声明为虚函数。如果基类的析构函数被声明为虚函数,则派生类的析构函数也自动成为虚函数。 如果基类中的虚函数在基类中不执行具体的操作,只是为派生类提供一个统一的接口,此时可以将其声明为纯虚函数。 virtual 函数类型 函数名(参数列表)=0; 包含有纯虚函数的类称为抽象类。不能利用抽象类创建对象,抽象类通常用来作为基类去建立派生类。 当派生类重新定义了所有纯虚函数之后,就可以通过用指向抽象类的指针指向派生类对象,从而访问不同派生类的成员函数,进而实现程序的多态性操作了。 运算符重载就是对已有的运算符赋予新的含义,使同一个运算符作用于不同类型的数据时实现不同的操作。 函数类型 operator运算符(参数列表) { 函数体 } 10.4.1 运算符重载的定义 例如: int operator+ (int a,int b){ … } //对运算符+重载,operator+是函数名 C++允许重载的运算符 C++不允许重载的运算符 在对运算符进行重载过程中应遵循如下规则: 用户不可以自己定义新的运算符,只能对已有的C++运算符进行重载。 重载不能改变运算符运算对象(即操作数)的个数,即单目运算符只能重载为单目运算符,多目运算符只能重载为多目运算符。 重载不能改变运算符的优先级和结合性。 重载运算符的功能应与该运算符作用于标准类型数据时所实现的功能类似,否则会影响程序的可读性。 10.4.2 运算符重载的形式 双目运算符重载为成员函数后,就可以在主函数或其他类中进行调用了,通常有显式和隐式两种调用方法。 1.双目运算符重载作为类的成员函数 例如: Complex Complex::operator+(Complex c) { //定义“+”运算符重载函数 Complex t; t.real=real+c.real; //成员函数中包含隐含的this指针,该语句等价于 //t.real=this-real+c.real或t.real=(*this).real+c.real t.imag=imag+c.imag; return t; } 则a+b为隐式调用,它等价于a.operator+(b),这是显式调用。 单目运算符重载作为类的成员函数时,操作数为访问该重载运算符的对象本身的数据,也由this指针指出,因此,单目运算符重载函数没有参数。 2.单目运算符重载作为类的成员函数 例如: int operator++(); //对单目运算符++的重载 a.operator++(); //单目运算符的显式调用 ++a; //单目运算符的隐式调用 如果函数需要访问类的私有成员,则必须声明为该类的友元函数。由于友元函数不是类的成员函数,不属于任何一个类对象,所以没有this指针。 3.双目运算符重载作为类的友元函数 例如: operator+(a,b); //显式调用 a+b; //隐式调用 双目运算符重载为友元函数时,由于没有this指针,所以操作数要通过友元函数的参数指出。 与双目运算符重载作为友元函数类似,单目运算符重载作为友元函数时,操作数要通过友元函数的参数指出。 4.单目运算符重载作为类的友元函数 例如: operator++(a); //显式调用 ++a; //隐式调用 10.4.3 常用运算符的重载 1.自增自减运算符的重载 单目运算符“++”和“--”有前置和后置两种形式,C+

文档评论(0)

好文精选 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档