重载,重写,傻傻分不清楚

在C++中,重载(Overloading)和重写(Overriding)是两个不同的概念,它们涉及到函数或方法的使用和定义。下面分别介绍它们:

重载(Overloading)

重载是指在同一作用域内,允许有多个同名函数,这些函数的参数列表不同(参数的个数或类型不同)。编译器会根据调用时传递的参数来选择正确的函数版本。重载适用于普通函数和类成员函数。

示例:

#include <iostream>

void display(int num) {
    std::cout << "Displaying an integer: " << num << std::endl;
}

void display(double num) {
    std::cout << "Displaying a double: " << num << std::endl;
}

int main() {
    int intValue = 42;
    double doubleValue = 42.5;

    display(intValue);      // 调用 display(int)
    display(doubleValue);   // 调用 display(double)

    return 0;
}

重写(Overriding)

重写是指派生类中重新定义基类中的虚函数(virtual function),以实现多态(Polymorphism)。派生类中的函数签名必须与基类中的虚函数完全相同(返回类型、函数名和参数列表)。当通过基类指针或引用调用该函数时,将根据对象的实际类型动态地调用相应的版本。

示例:

#include <iostream>

class Base {
public:
    virtual void display() {
        std::cout << "Displaying base class." << std::endl;
    }
};

class Derived : public Base {
public:
    // 重写基类的虚函数
    void display() override {
        std::cout << "Displaying derived class." << std::endl;
    }
};

int main() {
    Base* basePtr = new Base();
    Base* derivedPtr = new Derived();

    basePtr->display();     // 调用 Base::display()
    derivedPtr->display();  // 调用 Derived::display()

    delete basePtr;
    delete derivedPtr;

    return 0;
}

总结一下:

  • 重载是在同一作用域内定义多个同名函数,但参数列表不同。
  • 重写是派生类重新定义基类中的虚函数,实现多态。
posted @ 2023-04-27 10:05  严_青  阅读(22)  评论(0编辑  收藏  举报