RTTI机制(运行时类型识别)

在多态里面,基类里的虚函数和派生类里的虚函数形成了遮蔽,这就导致在主程序运行时,有些表达式的类型没有办法确定。必须等到程序运行结束后,根据具体的环境才能确定。看下面的代码:
#include <iostream>
#include <typeinfo>
using namespace std;class base{
public:virtual void func();
protected:int m_a;int m_b;
};void base :: func()
{cout<<"base"<<endl;
}class der: public base{
public:void func();
private:int m_c;
};void der :: func()
{cout<<"der"<<endl;
}int main()
{base *p;int n;cin>>n;if (n <= 100){p = new base();}else{p = new der();}cout<<typeid(*p).name()<<endl;return 0;
}

这里用户输入n的值不同,得到的结果也不同。也就是说在编译阶段,编译器无法获取p将要指向的对象,也就没有办法获取数据类型。但是编译器可以在编译阶段做好各种准备,这样程序在运行后可以借助这些准备好的数据来获取类型信息。

这样做虽然会占用更多的内存,效率也降低了,但这是没办法的事情,编译器实在是无能为力了。
这种在程序运行后确定对象的类型信息的机制称为运行时类型识别(Run-Time Type Identification,RTTI)。在 C++ 中,只有类中包含了虚函数时才会启用 RTTI 机制,其他所有情况都可以在编译阶段确定类型信息。
多态(Polymorphism)是面向对象编程的一个重要特征,它极大地增加了程序的灵活性,C++、C#、Java 等“正统的”面向对象编程语言都支持多态。但是支持多态的代价也是很大的,有些信息在编译阶段无法确定下来,必须提前做好充足的准备,让程序运行后再执行一段代码获取,这会消耗更多的内存和 CPU 资源。

RTTI机制(运行时类型识别)相关推荐

  1. 白话C++系列(27) -- RTTI:运行时类型识别

    http://www.cnblogs.com/kkdd-2013/p/5601783.html RTTI-运行时类型识别 RTTI:Run-Time Type Identification. 那么RT ...

  2. c++ RTTI(运行时类型识别)

    通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型.c++通过下面两个操作符提供RTTI. (1)typeid:返回指针或引用所指对象的实际类型. (2)dynamic_cast:将基类 ...

  3. C++知识点54——RTTI(运行时类型识别)

    一.RTTI概述 RTTI的功能由两个运算符实现,一个是typeid,用来返回表达式的类型:另一个是dynamic_cast,作用是将基类的指针或引用安全地转为子类的指针或引用 二.typeid ty ...

  4. C++RTTI(运行时类型识别)与异常处理解析

    1:RTTI是在只有一个指向基类的指针或引用时所确定的一个对象的类型 RTTI可以在程序运行时通过某一个对象的只恨确定该对象的类型,方便面向对象编程 测试代码如下 #include"stda ...

  5. java 运行时类型_Java基础之RTTI 运行时类型识别

    运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息. 多态(polymorphism)是基于R ...

  6. MFC六大核心机制之二:运行时类型识别(RTTI)

    上一节讲的是MFC六大核心机制之一:MFC程序的初始化,本节继续讲解MFC六大核心机制之二:运行时类型识别(RTTI). typeid运算子 运行时类型识别(RTTI)即是程序执行过程中知道某个对象属 ...

  7. java rtti_举例讲解Java的RTTI运行时类型识别机制

    1.RTTI:运行时类型信息可以让你在程序运行时发现和使用类型信息. 在Java中运行时识别对象和类的信息有两种方式:传统的RTTI,以及反射.下面就来说下RTTI. RTTI:在运行时,识别一个对象 ...

  8. Java RTTI运行时类型识别

    RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型. RTTI提供了以下两个非常有用的操作 ...

  9. c++远征之多态篇——运行时类型识别(RTTI)

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 1.RTTI(Run-Time Type Information),运行时类型识别. 涉及typeid.dynamic_cast这两个知识点. R ...

最新文章

  1. 13 款惊艳的 Node.js 框架——第1部分
  2. 关于我的Android 博客
  3. Ubuntu18.04 JDK8
  4. boost::hana::detail模块实现相关算法的测试程序
  5. php异步检测用户名是否已经存在,AJAX实例-检测用户名是否存在
  6. 从2D到3D 开发者讲述“街霸V”的美术秘笈
  7. HTTPS下导出excel失败解决办法
  8. 我的docker随笔23:修改容器时区和添加中文支持
  9. paip.软件版本完善计划VC423
  10. linux为mysql创建gpower_实战:在Java Web 项目中使用HBase
  11. 斐讯路由器k2p a1刷官改只能刷入k2p_57_v*_*固件无法刷入k2p_mtk_v*_*版本--刷入后无法进入主页面/刷入后无法启动
  12. 无法复制 文件:无法读源文件或磁盘
  13. 个人运营app需要多少钱【费用】
  14. 钉钉机器人智能提醒_使用钉钉机器人定时发送消息
  15. Dilated Convolution + Receptive Field
  16. 测开基础串讲-Java基础-测开常用API之Random类
  17. 最新pycharm安装教程
  18. excel.h的简单使用
  19. 十六进制转八进制(C语言版)
  20. 一百行代码实现的HTML5登录页面

热门文章

  1. xos详解5:PendSV_Handler
  2. 通过Windows远程桌面连接将远程文件传输至本地
  3. 用 pycharm 可视化管理 sqlite 数据库
  4. 感叹号挖孔屏稳了!iPhone 14 Pro高清概念图曝光:屏占比创5年最高
  5. 小鹏汽车回应“非法收集人脸数据被罚10万”:误购第三方设备 数据已删除
  6. 车主高速充电1小时排队4小时 国庆高速公路每日充电量创新高
  7. 格罗方德今年有望提高汽车芯片产量,并将投入60亿美元扩大产能
  8. 启科量子加速商业化:量子通信为「盾」,量子计算为「矛」
  9. 春节假期前5天全国快递处理量达3.65亿件 同比增长224%
  10. 史上最难吃系列,肯德基就不能好好做鸡吗?