重载和重写的区别是什么

重载(Overloading)

  • 定义:在同一个作用域内,允许存在多个同名的函数,但是这些函数的参数列表必须不同(包括参数的个数、类型、顺序等)。
  • 目的:通过相同的函数名来处理不同类型的参数,提高代码的灵活性。
  • 发生条件:函数名相同,但参数列表不同。
int add(int a, int b) {
    return a + b;
}

double add(double a, double b) {
    return a + b;
}

重写(Overriding)

  • 定义:在派生类中重新实现(覆盖)其基类的虚函数。发生在继承关系中,子类重新定义基类的虚函数,实现子类自己的版本。
  • 目的:支持多态性,允许基类的指针或引用在运行时指向派生类对象,并调用相应的派生类函数。
  • 发生条件:子类继承自父类,子类中的函数与父类中的虚函数具有相同的函数签名。
class Shape {
public:
    virtual void draw() const {
        // 具体的实现
    }
};

class Circle : public Shape {
public:
    void draw() const override {
        // Circle 版本的实现,覆盖了基类的虚函数
    }
};
图片[1]-重载和重写的区别是什么-不念博客

总结

  • 重载是指在同一作用域中定义多个同名函数,通过参数列表的不同来区分;
  • 重写是指派生类重新实现(覆盖)其基类的虚函数,以支持多态性。
© 版权声明
THE END