覆盖和重载之间有什么区别?

“覆盖”和”重载”在C++面向对象编程中是两个非常重要的概念,它们的区别如下:

  1. 函数重载(Overloading):这发生在同一个类中,当你有两个或更多数量的函数拥有相同的名字但是参数列表不同(比如参数数量不同,参数类型不同,或者参数顺序不同)时,我们就称之为函数重载。例如:
class Example {
public:
    void func(int a) { /*...*/ } // 第一个版本的func函数
    void func(double a) { /*...*/ } // 第二个版本的func函数,参数是双精度浮点数
};
  1. 函数覆盖(Overriding):这发生在继承关系中,当子类有一个和父类完全相同的函数(函数名相同,参数列表相同,返回类型也相同),我们就称之为函数覆盖。子类覆盖父类的函数是为了提供不同的实现,这是多态性的一个重要体现。例如:
class Base {
public:
    virtual void func() { /*...*/ } // 父类的func函数
};

class Derived : public Base {
public:
    void func() override { /*...*/ } // 子类的func函数,覆盖了父类的func函数
};

在这个例子中,如果你有一个指向Derived类对象的Base类指针,并且通过这个指针调用func函数,将会执行Derived类的func函数,这就是多态性的体现。

发表评论

后才能评论