1、Overload(重载):几个函数使用相同的名字,但参数或返回值不同:
- 相同的范围(在同一个类中)
- 函数名字相同
- 参数不同(若只有返回值不同,则不能构成重载)
- virtual关键字可有可无
2、Override(覆盖):派生类函数覆盖基类函数:
- 不同的范围(分别位于派生类与基类)
- 函数名字相同
- 参数相同(返回值类型也要相同)
- 基类函数必须有virtual关键字
3、Overwrite(重写):派生类的函数屏蔽了与其同名的基类函数:
示例如下:
class Parent
{
public:
void func() {
printf("Parent.func()\n");
}
virtual void vFunc() {
printf("Parent.vFunc()\n");
}
virtual int add(int x, int y) {
printf("Parent.add()\n");
return x + y;
}
// 重载(overload)add函数
double add(double x, double y) {
printf("Overload: Parent.add()\n");
return x + y;
}
};
class Child: public Parent
{
public:
// 重写(overwrite)父类函数
int func() {
printf("Child.func()\n");
return 0;
}
// 覆盖(override)父类虚函数,实现多态
void vFunc() {
printf("Child.vFunc()\n");
}
};
int main()
{
Parent *pp = new Parent();
pp->func(); // Parent.func()
pp->vFunc(); // Parent.vFunc()
pp->add(1, 2); // Parent.add()
pp->add(1.0, 2.0); // Overload: Parent.add()
pp = new Child();
pp->func(); // Parent.func()
pp->vFunc(); // Child.vFunc()
return 0;
}