zoukankan      html  css  js  c++  java
  • C++ 的 RTTI

    1.定义:Run-Time Type Information(运行时类型检测),是指程序能够使用基类指针或引用来检查这些指针或引用所指的对象的实际派生类型

    2.C++ RTTI中提供了两种常用的类型:

      typeid:返回指针或引用所指对象的实际类型

      dynamic_cast: 将基类类型的指针或引用安全地转换为派生类型的指针和引用

    3.以上两种类型的使用,必须依赖虚函数表

    4.下面通过一个例子说明:

    给出基类和派生类:

     1 class A
     2 {
     3 public:
     4     int num;
     5     static int data;
     6     virtual void run()
     7     {
     8         std::cout << "A run 
    ";
     9     }
    10 };
    11 int A::data = 1;
    12 class B :public A
    13 {
    14 public :
    15     int num = 0;
    16     static int data;
    17     void run()
    18     {
    19         std::cout << "B run
    ";
    20     }
    21     void test()
    22     {
    23         std::cout << num << "
    ";
    24         std::cout << "B test
    ";
    25     }
    26 };
    27 int B::data = 2;

    测试一:(typeid)

     1 void main()
     2 {
     3     A a1;
     4     B b1;
     5     A *p1 = &a1;
     6     A *p2 = &b1;
     7     //typeid:返回指针或引用所指对象的实际类型
     8     std::cout << typeid(p1).name() << "  " << typeid(p2).name() << std::endl;
     9     std::cout << (typeid(p1) == typeid(p2)) << "
    ";
    10 
    11     std::cout << typeid(*p1).name() << "  " << typeid(*p2).name() << std::endl;
    12     std::cout << (typeid(*p1) == typeid(*p2)) << "
    ";//重载的方式判定类型是否一致
    13     std::cin.get();
    14 }

    测试二:(dynamic_cast)

     1 void main3()
     2 {
     3     //dynamic_cast : 将基类类型的指针或引用安全地转换为派生类型的指针和引用
     4     A a1;
     5     B b1;
     6     A *p1 = &a1;
     7     A *p2 = &b1;
     8     B *p3(nullptr);
     9     //p3 = dynamic_cast<B*>(p2);
    10     //dynamic_cast必须要有虚函数,根据虚函数表转换,不能转换
    11     //转换失败为空 类的空指针可以调用不调用数据的函数
    12     //转换成功就是地址
    13     std::cout << p3 << "
    ";
    14     p3->test();
    15     std::cin.get();
    16 }


    没什么说的,直接看测试样例!

  • 相关阅读:
    ScrollView 字典
    centos 6.x 安装redis
    Linux 添加epel源
    Linux 关于解压
    Linux 删除文件夹
    Linux sz rz
    让div 实现 input效果
    解决js浮点数计算bug
    键盘绑定事件和焦点处理
    npm的镜像替换成淘宝
  • 原文地址:https://www.cnblogs.com/sxmcACM/p/4541472.html
Copyright © 2011-2022 走看看