详细讲解C++的重载和重写?
作者:野牛程序员:2023-05-19 09:22:57C++程序设计阅读 2725
在C++中,重载(Overloading)和重写(Overriding)是面向对象编程中的两个重要概念,它们用于处理类成员函数的多态性。
重载(Overloading)是指在同一个作用域内,可以定义多个名称相同但参数列表不同的函数。重载函数根据参数的类型、数量或顺序的不同来进行区分。在C++中,函数重载可以用于构造函数和普通成员函数。
下面是一个重载函数的示例:
#include <iostream> void print(int num) { std::cout << "Integer: " << num << std::endl; } void print(double num) { std::cout << "Double: " << num << std::endl; } int main() { print(5); // 调用 print(int) print(3.14); // 调用 print(double) return 0; }
在上面的例子中,print
函数被重载了两次,一次接受 int
类型参数,一次接受 double
类型参数。根据传递的参数类型的不同,编译器会选择合适的函数进行调用。
重写(Overriding)是指在派生类中重新定义基类的虚函数,以实现特定于派生类的行为。重写函数必须与基类函数具有相同的函数签名(包括函数名、参数列表和返回类型)。
下面是一个重写函数的示例:
#include <iostream> class Base { public: virtual void display() { std::cout << "Base class" << std::endl; } }; class Derived : public Base { public: void display() override { std::cout << "Derived class" << std::endl; } }; int main() { Base* basePtr = new Derived(); basePtr->display(); // 调用 Derived 的 display() delete basePtr; return 0; }
在上面的例子中,Base
类中的 display
函数被声明为虚函数,并在派生类 Derived
中被重写。通过使用基类指针指向派生类对象,可以实现动态多态性。在运行时,将调用派生类的 display
函数而不是基类的 display
函数。
总结:
重载是在同一作用域内定义具有相同名称但参数列表不同的多个函数,根据参数类型、数量或顺序进行区分。
重写是在派生类中重新定义基类的虚函数,以实现特定于派生类的行为。
重载是静态多态性(编译时多态性),而重写是动态多态性(运行时多态性)。
重载是根据参数的不同来选择函数,而重写是根据对象的类型来选择函数。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
