编程札记(二)


一、获取任意数据在编译器中的类型标识

  1.利用多态

  2.利用 dynamic_cast

  3.利用 typeid(推荐这种方法)

  对于多态实现,存在以下缺陷:

    1)必须从基类开始提供类型虚函数;

    2)所有的派生类都必须重写类型虚函数;

    3)每个派生类的类型名必须唯一;

  对于 dynamic_cast 实现,只能得到类型转换的结果,不能获取真正的动态类型,同时dynamic_cast 必须多态实现。

  typdeid 专门用于动态类型识别

  1. 它是一个关键字
  2. typeid返回一个type_info类对象
  3. 使用时需要包含头文件
  4. 直接指定对象或者类型,普通类型普通对象也可以

  用法一:const char* typeid(数据).name();

  用法二: A* p;  if ( typeid(*p) == typeid(A) ) { … }