运行时类型识别PPT学习教案_第1页
运行时类型识别PPT学习教案_第2页
运行时类型识别PPT学习教案_第3页
运行时类型识别PPT学习教案_第4页
运行时类型识别PPT学习教案_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1 运行时类型识别运行时类型识别 运行时类型识别(运行时类型识别(Run-time type identification , RTTI)是指)是指,在只有一个指向基类的指针或引用时,确在只有一个指向基类的指针或引用时,确 定所指对象的准确类型的操作。定所指对象的准确类型的操作。 一般情况下,虚函数机制并不需要一个类的确切一般情况下,虚函数机制并不需要一个类的确切 类型,就可以实现对那种类型的对象实施正确行为。类型,就可以实现对那种类型的对象实施正确行为。 但是,在很多情况下,虚函数无法克服本身的不能反但是,在很多情况下,虚函数无法克服本身的不能反 映确切类型的局限。不可避免要对对象类型

2、进行动态映确切类型的局限。不可避免要对对象类型进行动态 判断,也就是动态类型的侦测识别。判断,也就是动态类型的侦测识别。 1. RTTI的概念的概念 第1页/共23页 和很多其他语言一样,和很多其他语言一样,C+是一种静态类型语言。其是一种静态类型语言。其 数据类型是在编译期就确定的,不能在运行时更改。数据类型是在编译期就确定的,不能在运行时更改。 然而由于面向对象程序设计中多态性的要求,然而由于面向对象程序设计中多态性的要求,C+中中 的指针或引用的指针或引用(Reference)本身的类型,可能与它实际本身的类型,可能与它实际 代表代表(指向或引用指向或引用)的类型并不一致。我们往往需要将

3、的类型并不一致。我们往往需要将 一个多态指针转换为其实际指向对象的类型,就需要一个多态指针转换为其实际指向对象的类型,就需要 知道运行时的类型信息,这就产生了运行时类型识别知道运行时的类型信息,这就产生了运行时类型识别 的要求。的要求。 第2页/共23页 上面是一个典型的类继承关系图,基类在上,派上面是一个典型的类继承关系图,基类在上,派 生类向下生长。面向对象程序设计的一般目标就是用生类向下生长。面向对象程序设计的一般目标就是用 代码管理指向基类的指针。所以如果想增加一个新类代码管理指向基类的指针。所以如果想增加一个新类 来扩充程序(比如从来扩充程序(比如从shape中派生出中派生出rhom

4、boid),代),代 码体部分并不受影响。码体部分并不受影响。 shape circle square triangle 第3页/共23页 第4页/共23页 第5页/共23页 第6页/共23页 8 =(const typeinfo nbool operator !=(const typeinfo n返回被测对象的类型名返回被测对象的类型名: nconst char * name()const; n判断两个对象定义的前后关系:判断两个对象定义的前后关系: nbool before(const typeinfo typeinfo类类 第7页/共23页 9 所涉及的运算符所涉及的运算符 第8页/共2

5、3页 shape* 以如果想知道一个指针所指对象的以如果想知道一个指针所指对象的 精确类型,我们必须逆向引用这个精确类型,我们必须逆向引用这个 指针。比如,指针。比如,s是个是个shape* ,那么:那么: ncout typeid(*s).name()endl; n将显示出将显示出s所指向的对象类型。所指向的对象类型。 第9页/共23页 第10页/共23页 12 显示:显示: “unsigned int” “string” 第11页/共23页 第12页/共23页 第13页/共23页 第14页/共23页 第15页/共23页 第16页/共23页 第17页/共23页 19 dynamic_cast运算符功能运算符功能 第18页/共23页 20 dynamic_cast的机制的机制 第19页/共23页 21 使用使用RTTI 第20页/共23页 22 ncouttypeid(p)!=typeid(D*); /而非指向整个子类对象而非指向整个子类对象 ncouttypeid(r)=typeid(D); /引用的类型却是子类的引用的类型却是子类的 n couttypeid(*p)=typeid(D); /间址访问的是子类对象间址访问的是子类对象 ncouttypeid(*p)!=typeid(B); /而非父类而非父类 n couttypeid( /引用的地址是父类的引用的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论