为了账号安全,请及时绑定邮箱和手机立即绑定

代码有问题,求大神解释一下

#include <iostream>

#include <stdlib.h>

#include<typeinfo>

#include <string>

using namespace std;


/**

 * 定义移动类:Movable

 * 纯虚函数:move

 */

class Movable

{

public:

    virtual void move()=0;

};


/**

 * 定义公交车类:Bus

 * 公有继承移动类

 * 特有方法carry

 */

class Bus : public Movable

{

public:

    virtual void move()

    {

        cout << "Bus -- move" << endl;

    }

    

    void carry()

    {

        cout << "Bus -- carry" << endl;

    }

};


/**

 * 定义坦克类:Tank

 * 公有继承移动类

 * 特有方法fire

 */

class Tank :public Movable

{

public:

    virtual 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;

    Tank t;

    doSomething(&b);

    doSomething(&t);

    return 0;

}

这是我的代码,一运行就出现https://img1.sycdn.imooc.com//5b1a7c130001c69713660768.jpg这个,当把以下代码注释掉

  /*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();

    }*/

编译运行能过,该怎么解决

正在回答

1 回答

已解决,是没有开启RTTI

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之多态篇
  • 参与学习       66236    人
  • 解答问题       314    个

本教程将带领大家体会面向对象三大特性中的多态特性

进入课程

代码有问题,求大神解释一下

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信