第十四-十七章C++面向对象概述教案.pptVIP

  1. 1、本文档共49页,可阅读全部内容。
  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文档。上传文档
查看更多
8.虚拟继承 虚拟继承 只有一个共享的基类子对象被继承 无论该基类在继承层次中出现多少次。 这个共享的基类被称之为“虚基类”。 9.虚基类 对于上面的例子, 声明派生类B和类C时,将公共基类A声明为虚基类, 由类B和类C派生出来的类D在创建对象时将只建立公共基类A的一个副本。 在声明派生类时,虚基类的声明形式如下: class 派生类名:virtual 继承方式 基类名 { 派生类新定义的成员 }; 关键字virtual申明基类为虚基类,多重继承时,每一个虚基类都需要一个关键字virtual。 三、多态性与虚函数 1.多态性与虚函数 多态性是指同一对象接受相同的消息时产生不同行为,即对应相同的函数名却执行不同的函数体。 在C++中,多态性主要通过两类三种方式实现。 第一类:静态多态(静态联编的多态、编译时多态) 有两种实现方式: 运算符重载 函数重载 第二类:动态多态(动态联编的多态、运行时多态) 有一种实现方式: 虚函数 2.运算符重载 为已有的运算符定义新的功能,使得同一个运算符作用于不同类型数据时产生不同的行为。 为自定义的数据类型定义运算符。 通过定义成员函数或友元函数来实现。 3.运算符重载的几个概念 可以重载的运算符 多数运算符都可以重载,只有以下几个运算不可以重载: . 圆点运算符 ?: 三目运算符 .* 成员指针选择 Sizeof 测试数据长度运算符 :: 作用域运算符 typeof 测试数据类型运算符 运算符重载的限制 原有特性不变 操作数个数不变; 优先级不变; 结合性不变; 语义不变 注意: 通常不随意改变重载运算符的功能含义。 定义运算符重载的函数时不能设置默认值。 只能使用C++已有的运算符,不可自己创造新的运算符。 4.运算符重载实现 运算符重载为成员函数的定义形式: 类型 operator 运算符 (参数表) { 函数体 } 运算符重载为友元函数的定义形式: friend 类型 operator 运算符 (参数表) { 函数体 } 5.静态联编和动态联编 将程序中的函数调用解释为执行特定的函数体被称为联编(binding)。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。 静态联编: 联编工作出现在编译连接阶段,在编译时进行。 动态联编: 在程序运行时进行联编。 如何来确定是静态联编还是动态联编呢? C++规定动态联编是在虚函数的支持下实现的。 6.静态联编 静态联编的函数重载主要有两种方式: 在同一个类中重载函数, 基类成员函数在派生类中重载。 7.函数重载 函数重载(function overloading) C++允许定义多个同名函数,只要这些函数有不同的参数列表(至少有不同类型的参数)。 在静态联编的时候,C++通过签名进行区别。 签名是函数名和参数类型的组合。 注意: 全局函数和类的成员函数同名不算重载,因为函数的作用域不同。 8.成员的重载 成员函数被重载的特征: 相同范围(在同一个类中); 函数名字相同; 参数不同(个数、类型、顺序); virtual关键字可有可无。 class A { public: //…… show(int,int); show(double); show(double,int); } //重载函数参数类型和个数不同 9.基类成员函数在派生类中重载 在派生类中重载基类中的成员函数,实质还是成员函数的重载 10.动态联编 C++中动态联编是在虚函数的支持下实现的。 使用虚函数的时候,在程序编译阶段无法确定该函数调用应执行哪一段函数代码,只有在程序运行过程中执行到这个调用时,才能确定执行哪一段函数代码的联编方式(动态联编),这是动态多态的实现原理。 11.虚函数 虚函数的声明方法是在基类的函数原型前加上关键字virual。 虚函数的定义 虚函数的的定义格式如下: virtual 类型 成员函数名 (参数表) 说明: 函数必须是非静态的成员函数,不能是非成员函数。 析构函数可以是虚函数,构造函数不能是虚函数。 虚函数体可以定义在类体内,也可以定义在类体外,在类体外不加virtual。 虚函数具有传递性,一个函数一旦被声明为虚函数,则不管经历多少派生层,派生类中所有声明原型相同的函数都是虚函数。 在派生类中,虚函数可以不加关键字virtual。 12.纯虚函数和抽象类 纯虚函数不必定义其函数体。 含有纯虚函数的类称为抽象类。 13.虚函数 虚函数为了重载和多态的需要,在基类中定义的,即使函数体定义是空,所以子类中可以重写也可以不写基类中的函数。 纯虚函数在基类中是没有函数具体定义的,必须在子类中加以实现。 ? 纯虚函数定义形式如下: virtual 类型 成员函数名 (参数表) =0;

文档评论(0)

沃爱茜 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档