• RTTI


    RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。

    RTTI介绍

    RTTI提供了以下两个非常有用的操作符:

    (1)typeid操作符,返回指针和引用所指的实际类型。

    (2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用。

    //面试,RTTI实时类型检测

    //主要依赖typeid, dynamic_cast

    //类型不匹配转失败,返回为空,保证类型安全

     1 #include <iostream>
     2 
     3 //面试,RTTI实时类型检测
     4 //主要依赖typeid, dynamic_cast
     5 //类型不匹配转失败,返回为空,保证类型安全
     6 
     7 class A
     8 {
     9 public:
    10     int num;
    11     static int data;
    12     virtual void run()//虚函数
    13     {
    14         std::cout << "Arun" << std::endl;
    15     }
    16 };
    17 
    18 class B :public A
    19 {
    20 public:
    21     int num;
    22     static int data;
    23     virtual void run()//虚函数
    24     {
    25         std::cout << "Brun" << std::endl;
    26     }
    27     void test()
    28     {
    29         std::cout << "Btest" << std::endl;
    30     }
    31 };
    32 
    33 int A::data = 1;
    34 int B::data = 2;
    35 
    36 void main()
    37 {
    38     A a1;
    39     B b1;
    40 
    41     A *p1 = &a1;//直接用基类指针引用基类对象
    42     A *p2 = &b1;//用基类指针引用一个派生类对象
    43     B *p3(nullptr);//派生类指针,为空
    44 
    45     p3 = static_cast<B *>(p1);
    46 
    47     p3->test();
    48     
    49     system("pause");
    50 }
  • 相关阅读:
    python3 多线程的基本用法
    ASP.NET MVC下的四种验证编程方式
    漫步ASP.NET MVC的处理管线
    asp.net mvc源码分析-Action篇 IModelBinder
    在 Asp.NET MVC 中使用 SignalR 实现推送功能
    说说Python 中的文件操作 和 目录操作
    Python 用 os.walk 遍历目录
    我来说说MVC过滤器
    学习Python必须要知道的常用模块
    Python中的并发编程
  • 原文地址:https://www.cnblogs.com/denggelin/p/5673927.html
Copyright © 2020-2023  润新知