C++中,函数重载描述的是同一个类中不同成员函数之间的关系;函数重写是子类和基类之间不同成员函数之间的关系。
1、函数重载
在相同作用域中存在多个同名的函数,这些函数的参数表不同,编译器根据函数不同的形参表对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。
特点:
- 函数重载必须在同一个类或同一个命名空间中进行;
- 子类无法重载父类函数,父类同名函数将被覆盖;
- 重载是在编译器期间根据参数类型和个数决定调用哪个函数。
函数重载的代码示例:
void Test(int a);
void Test(double a);
void Test(int a, int b);
void Test(double a, int b);
注意:如果仅仅是函数的返回值不同,是没办法重载的。
2、函数重写
子类重写从基类继承过来的函数,子类的函数名、返回值、参数列表都必须和基类相同。
特点:
- 函数重写必须发生在父类与子类之间;
- 父类与子类的函数原型完全一样;
- 使用virtual声明之后能够产生多态(若不写virtual关键字,则称为重定义),多态是在运行期间根据具体对象的类型来决定调用哪个函数。
函数重写和多态的代码示例:
#include <IOStream>
using namespace std;
class base {
public:
void Display1() {}
virtual void Display2() {}
};class derived : public base {
public:
void Display1() {} // 函数重写
virtual void Display2() {} // 虚函数实现多态
};