C++ RTTI 示例

2016年6月21日 · 160 字 · 1 分钟

#include <iostream>
#include <stdlib.h>
#include <string>
#include <typeinfo>
using namespace std;

/**
* 定义移动类:Movable
* 纯虚函数:move
*/
class Movable
{
  public:
    virtual void move() = 0;
};

/**
* 定义公交车类:Bus
* 公有继承移动类
* 特有方法carry
*/
class Bus : public Movable
{
  public:
    void move()
    {
      cout << "Bus -- move" << endl;
    }
  
    void carry()
    {
      cout << "Bus -- carry" << endl;
    }
};

/**
* 定义坦克类:Tank
* 公有继承移动类
* 特有方法fire
*/
class Tank :public Movable
{
  public:
    void move()
    {
      cout << "Tank -- move" << endl;
    }

    void fire()
    {
      cout << "Tank -- fire" << endl;
    }
};

/**
* 定义函数doSomething含参数
* 使用dynamic_cast转换类型
*/
void doSomething(Movable *obj)
{
  obj->move();

  if (typeid(*obj) == typeid(Bus))
  {
   Bus *bus = dynamic_cast<Bus *>(obj);
   bus->carry();
  }

  if (typeid(*obj) == typeid(Tank))
  {
   Tank *tank = dynamic_cast<Tank *>(obj);
   tank->fire();
  }
}

int main(void)
{
  Bus *b = new Bus;
  Tank *t = new Tank;
  doSomething(b);
  doSomething(t);
  delete b;
  delete t;
  return 0;
}