满意回答中对于重载的解释明显有误,重载要求必须是在同一个类中,而不是在基类和派生类中,他的这种解释更确切的说应该是隐藏,而且覆盖的解释也有误,覆盖要求必须是virtual关键字声明的虚函数,而且在不同类,同名同参,如果为非虚函数,则为隐藏~~~
按照对多态“同样的操作,得到不同的结果”的观点,重载(overload)和覆盖(override)都是实现多态的手段。其中,重载是静态多态实现,在程序编译时实现;覆盖是动态多态实现,在程序运行时实现。
重载:重载函数是定义在全局或某个类中。其要求是同名但参数不同的函数。而父类与子类中实现出现同名但参数不同的函数,不管是否有virtual,其基类函数将被隐藏,注意与重载区别,其调用时需在父类的成员函数前加T::进行区分(其中T为父类名)。
覆盖:函数必须是virtual,这是首要条件。其要求在不同域中(如子父类中),且要求函数名,参数,返回值都相同。
这样解释一下吧:
覆盖:
在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。
重载:
在基类中定义了一个非虚拟函数,然后在派生类中定义一个同名,但是具有不同的参数表的函数,这就是重载。在派生类对象上调用这几个函数时,用不同的参数会调用到不同的函数,有可能会直接调用到基类中的那个。
多态:
在基类中定义了一个虚拟函数,然后在派生类中又定义一个同名,同参数表的函数,这就是多态。多态是这3种情况中唯一采用动态绑定技术的一种情况。也就是说,通过一个基类指针来操作对象,如果对象是基类对象,就会调用基类中的那个函数,如果对象实际是派生类对象,就会调用派声雷中的那个函数,调用哪个函数并不由函数的参数表决定,而是由函数的实际类型决定。
呵呵,努力!