此c++程序中有什么错误

#include<iostream.h>classMammal{public:voidMove()const{cout<<"Mammalmoveonestep\n";}v... #include <iostream.h>
class Mammal
{
public:
void Move() const { cout << "Mammal move one step\n"; }
void Move(int distance) const
{
cout << "Mammal move ";
cout << distance <<" _steps.\n";
}
protected:
int itsAge;
int itsWeight;
};
class Dog : public Mammal
{
public:
void Move() const { cout << "Dog move 5 steps.\n"; }
};
int main()
{
Mammal bigAnimal;
Dog fido;
bigAnimal.Move();
bigAnimal.Move(2);
fido.Move();
fido.Move(10);
return 0;
}
展开
 我来答
百度网友d585d01
推荐于2016-07-19 · TA获得超过670个赞
知道小有建树答主
回答量:339
采纳率:0%
帮助的人:471万
展开全部
1.概念上的区别
重载:函数名相同,参数不同。重载函数处于同一个范围,比如同一个类中。

覆盖:函数名和参数都相同。函数处于基类和派生类中。它是针对虚函数的概念,指的是派生类的成员函数对基类成员函数的重新定义。这种关系的函数前面要加关键字virtual(基类中的虚函数必加,派生类中重新定义的虚函数可加可不加)。

隐藏:函数名相同,参数可相同也可不同。函数处于基类和派生类中。这种关系的函数前面没有关键字virtual(基类中的成员函数和派生类中的成员函数都没有)。
你的基类中的MOVE(int distance)被隐藏了。虽然参数不相同,但是派生类中的函数Dog把基类中的Mammal隐藏了。
更多追问追答
追问
应该怎么改呢 在基类的MOVE(int distance)前加上virtual吗
追答
基类前面加virtual也不行啊,因为覆盖的话,必须函数名和参数都相同才行。并且,只要基类和子类的函数名相同,不管参数是否相同,都会隐藏基类的函数。就是说,你子类中已经有了MOVE了,基类中两个MOVE函数都被隐藏了。即使你在基类中添加了virtual,也只能覆盖掉第一个MOVE,因为它和子类中函数名和参数都相同。基类中另外一个MOVE就被隐藏了,所以无法调用。你要是想调用,只能在子类中覆盖掉两个基类的函数,或者隐藏掉两个基类的函数
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式