当前位置:首页 C++ > 正文

c++重载(overload)和重写(overried)的区别?

作者:野牛程序员:2023-07-15 11:21:57 C++阅读 2752

在C++中,重载(overload)和重写(override)是面向对象编程中的两个重要概念,用于处理类和函数之间的关系。它们具有不同的含义和用途。

  1. 重载(Overload):

    • 重载是指在同一个作用域内,使用相同的名称但具有不同的参数列表来定义多个函数或操作符。

    • 重载函数可以根据参数的类型、数量或顺序进行区分,以便在相同的作用域内执行不同的操作。

    • 重载函数具有相同的名称,但函数签名(包括参数类型和数量)不同。

    • 重载函数的返回类型通常可以相同,也可以不同。

    • 重载函数可以被编译器静态地解析,根据调用时提供的参数类型来确定要调用的函数。

示例:

void print(int num);
void print(float num);
void print(string str);

在上述示例中,print 函数被重载了三次,根据参数类型的不同,可以选择不同的函数进行调用。

  1. 重写(Override):

    • 重写是指派生类(子类)重新定义基类(父类)中已有的虚函数。

    • 基类中的虚函数必须使用 virtual 关键字声明。

    • 派生类中的重写函数必须与基类的虚函数具有相同的函数签名(函数名、参数类型和返回类型都相同)。

    • 重写函数在派生类中提供了一种特定实现,覆盖了基类中的实现。

    • 当通过基类指针或引用调用虚函数时,根据实际对象的类型来确定要调用的重写函数。

示例:

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

class Derived : public Base {
public:
    void display() override {  // override关键字表明该函数是重写基类的虚函数
        cout << "Derived class display" << endl;
    }
};

在上述示例中,Derived 类继承自 Base 类,并重写了基类中的 display 函数。当通过基类指针或引用调用 display 函数时,根据实际对象的类型(基类或派生类)来确定要调用的函数。

总结:

  • 重载是为了在同一个作用域内使用相同的名称处理不同的参数,而重写是为了在派生类中重新定义基类中的虚函数。

  • 重载是静态的多态性(编译时多态),重写是动态的多态性(运行时多态)。

  • 重载函数根据函数签名进行区分,而重写函数必须具有相同的函数签名。

  • 重载函数通过编译器静态解析调用,而重写函数通过动态绑定(运行时多态)调用。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击