函数重写、重载与隐藏的区别
时间: 2023-09-23 15:06:13 浏览: 56
函数重写(override)、重载(overload)和隐藏(hide)都是 C++ 中的函数特性,它们的区别如下:
1. 函数重写:发生在基类和派生类之间,指的是派生类重新定义了基类中的虚函数,使得基类指针或引用在运行时调用派生类中的函数。重写的函数必须和基类函数具有相同的名称、参数列表和返回类型。重写使用 `virtual` 关键字声明。
2. 函数重载:指的是在同一个作用域内,根据函数参数的个数、类型或者顺序的不同,定义多个同名但不同参数的函数。编译器根据调用时的参数类型和数量,来选择正确的函数进行调用。
3. 函数隐藏:指的是在派生类中定义了与基类同名但不同参数的函数,使得基类函数在派生类中被隐藏。这种情况下,基类指针或引用在编译时就已经决定了调用哪个函数,无法动态绑定。如果需要实现动态绑定,则需要使用 `using` 声明基类函数,使得它在派生类中重新变为可见并进行重写。
总之,重写是动态多态性的一种体现,重载和隐藏是静态多态性的一种体现。
相关问题
C++类成员函数的重写和重载有啥区别
C++中的函数重载和函数重写是两个不同的概念。
函数重载是指在同一个作用域内,可以定义多个同名函数,但是它们的参数类型或个数不同。编译器会根据调用时传入的参数类型和个数来确定要调用哪个函数。函数重载可以提高代码的可读性和灵活性。
函数重写是指在派生类中重新定义基类中已有的虚函数,使得派生类对象通过该虚函数调用时,执行的是派生类中的函数实现。通过重写虚函数,可以实现多态性。重写虚函数的函数签名必须与基类中的虚函数完全相同。
需要注意的是,函数重写只能发生在继承类中,而函数重载则可以在任何作用域中进行。此外,函数重载和函数重写的解析规则也是不同的。函数重载是静态绑定,而函数重写是动态绑定。
面试题 重载与重写的区别
重载(overloading)和重写(overriding)是面向对象编程中两个重要的概念。
重载指的是在同一作用域内,通过改变函数名或参数列表的方式定义多个同名函数的行为。重载函数可以有不同的参数类型、个数或顺序。在调用重载函数时,编译器会根据传递的参数类型和个数来决定调用哪个函数。
重写指的是在子类中重新定义父类的方法,使得子类可以根据自己的需要对方法进行特定的实现。重写方法必须和父类的方法具有相同的名称、参数列表和返回类型。在调用重写方法时,会优先调用子类中的方法,而不是父类中的方法。
简而言之,重载是在同一类中定义多个同名函数,而重写是在子类中重新定义父类的方法。