C++:区别覆盖,重载与多态
3个回答
展开全部
按照对多态“同样的操作,得到不同的结果”的观点,重载(overload)和覆盖(override)都是实现多态的手段。其中,重载是静态多态实现,在程序编译时实现;覆盖是动态多态实现,在程序运行时实现。
重载:重载函数是定义在全局或某个类中。其要求是同名但参数不同的函数。而父类与子类中实现出现同名但参数不同的函数,不管是否有virtual,其基类函数将被隐藏,注意与重载区别,其调用时需在父类的成员函数前加T::进行区分(其中T为父类名)。
覆盖:函数必须是virtual,这是首要条件。其要求在不同域中(如子父类中),且要求函数名,参数,返回值都相同。
重载:重载函数是定义在全局或某个类中。其要求是同名但参数不同的函数。而父类与子类中实现出现同名但参数不同的函数,不管是否有virtual,其基类函数将被隐藏,注意与重载区别,其调用时需在父类的成员函数前加T::进行区分(其中T为父类名)。
覆盖:函数必须是virtual,这是首要条件。其要求在不同域中(如子父类中),且要求函数名,参数,返回值都相同。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2017-09-02
展开全部
这样解释一下吧:
覆盖:
在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。
重载:
在基类中定义了一个非虚拟函数,然后在派生类中定义一个同名,但是具有不同的参数表的函数,这就是重载。在派生类对象上调用这几个函数时,用不同的参数会调用到不同的函数,有可能会直接调用到基类中的那个。
多态:
在基类中定义了一个虚拟函数,然后在派生类中又定义一个同名,同参数表的函数,这就是多态。多态是这3种情况中唯一采用动态绑定技术的一种情况。也就是说,通过一个基类指针来操作对象,如果对象是基类对象,就会调用基类中的那个函数,如果对象实际是派生类对象,就会调用派声雷中的那个函数,调用哪个函数并不由函数的参数表决定,而是由函数的实际类型决定。
呵呵,努力!
覆盖:
在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。
重载:
在基类中定义了一个非虚拟函数,然后在派生类中定义一个同名,但是具有不同的参数表的函数,这就是重载。在派生类对象上调用这几个函数时,用不同的参数会调用到不同的函数,有可能会直接调用到基类中的那个。
多态:
在基类中定义了一个虚拟函数,然后在派生类中又定义一个同名,同参数表的函数,这就是多态。多态是这3种情况中唯一采用动态绑定技术的一种情况。也就是说,通过一个基类指针来操作对象,如果对象是基类对象,就会调用基类中的那个函数,如果对象实际是派生类对象,就会调用派声雷中的那个函数,调用哪个函数并不由函数的参数表决定,而是由函数的实际类型决定。
呵呵,努力!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询