C++:区别覆盖,重载与多态

 我来答
mali3702
2012-06-05
知道答主
回答量:1
采纳率:0%
帮助的人:1622
展开全部
满意回答中对于重载的解释明显有误,重载要求必须是在同一个类中,而不是在基类和派生类中,他的这种解释更确切的说应该是隐藏,而且覆盖的解释也有误,覆盖要求必须是virtual关键字声明的虚函数,而且在不同类,同名同参,如果为非虚函数,则为隐藏~~~
gh1232008
2012-08-12
知道答主
回答量:7
采纳率:100%
帮助的人:1.1万
展开全部
按照对多态“同样的操作,得到不同的结果”的观点,重载(overload)和覆盖(override)都是实现多态的手段。其中,重载是静态多态实现,在程序编译时实现;覆盖是动态多态实现,在程序运行时实现。
重载:重载函数是定义在全局或某个类中。其要求是同名但参数不同的函数。而父类与子类中实现出现同名但参数不同的函数,不管是否有virtual,其基类函数将被隐藏,注意与重载区别,其调用时需在父类的成员函数前加T::进行区分(其中T为父类名)。
覆盖:函数必须是virtual,这是首要条件。其要求在不同域中(如子父类中),且要求函数名,参数,返回值都相同。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-09-02
展开全部
这样解释一下吧:
覆盖:
在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。
重载:
在基类中定义了一个非虚拟函数,然后在派生类中定义一个同名,但是具有不同的参数表的函数,这就是重载。在派生类对象上调用这几个函数时,用不同的参数会调用到不同的函数,有可能会直接调用到基类中的那个。
多态:
在基类中定义了一个虚拟函数,然后在派生类中又定义一个同名,同参数表的函数,这就是多态。多态是这3种情况中唯一采用动态绑定技术的一种情况。也就是说,通过一个基类指针来操作对象,如果对象是基类对象,就会调用基类中的那个函数,如果对象实际是派生类对象,就会调用派声雷中的那个函数,调用哪个函数并不由函数的参数表决定,而是由函数的实际类型决定。

呵呵,努力!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式