为了账号安全,请及时绑定邮箱和手机立即绑定
有破绽呀,Animal的类中的move和eat函数不加virtual也能通过
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();
}
}
通过不了是你写错了,老哥
如果不写animal的默认构造函数,无法通过编译,但是dog的默认构造函数不写的话可以通过,是不是跟animal *p有关啊,他得用到默认构造函数啊
James老师讲的太好了
VS2017好像没有CMemoryException了,直接用了const std::exception&
内存不足!如果要是真的碰到这种事大部分人可能都会自杀吧。。。
现在内存的价格,不是一般的贵,是真的贵!
战斗鸡。。。。。
此处省去500字
纯虚函数=0,0中间没有什么东西,这或许就意味着纯洁吧!
virtual void reload()
{
cout << "Gun -- reload" << endl; }
};
void hunting(CanShut *s)
{
s->aim();
s->reload();
}
int main(void)
{
Gun *g = new Gun;
hunting(g);
delete g ;
g = NULL;
return 0;
}
int main(void)
{
// 通过父类对象实例化狗类
Animal *animal = new Dog();
// 调用成员函数
animal -> eat();
animal -> move();
// 释放内存
delete animal;
animal = NULL;
return 0;
}
给自己加油,到结尾的时候再打卡
回复:帅踢锅{
给大家出个题啊,下面代码的输出结果为什么?

int m = 1, n = 2, *p = &m;

cout << ++*q << *++q << endl;
}
q没有定义,编译报错,什么都不打印【手动滑稽】
不是没有输出Animal 就是没执行,只是由于没有在初始化列表里给Animal的构造函数传递name参数,所以执行了Animal的默认构造函数,所以没输出Animal。
课程须知
本课程是C++初级课程 1、熟练掌握C++语言基础语法
老师告诉你能学到什么?
1、虚函数、虚析构函数、纯虚函数 2、抽象类和接口类 3、运行时类别异常 4、异常处理

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消