21xrx.com
2025-07-08 22:00:30 Tuesday
文章检索 我的文章 写文章
C++中函数重载和重写的区别
2023-06-24 20:22:18 深夜i     --     --
C++ 函数 重载 重写 区别

在C++编程语言中,函数重载和重写是两个重要的概念,但是这两个概念容易混淆,本文将分别解释两个概念的含义及其区别。

函数重载(Function Overloading)是指在同一个作用域内,定义了多个函数名相同但是参数列表不同的函数,这些函数互相独立且不受其它同名函数的影响。当调用同名函数时,编译器会根据实参的类型和个数,选择最匹配的函数来调用。例如:

void print(int num)
  std::cout << "The integer is " << num << std::endl;
void print(double num)
  std::cout << "The double is " << num << std::endl;
void print(std::string str)
  std::cout << "The string is " << str << std::endl;
int main(){
  print(10);   // 调用第一个函数
  print(3.14);  // 调用第二个函数
  print("Hello"); // 调用第三个函数
  return 0;
}

函数重载可以提高代码的可读性和可维护性,使函数名更加直观。

函数重写(Function Overriding)是指派生类中的函数覆盖基类中的同名函数,实现同一个函数接口的多态性。重写函数必须与基类函数具有相同的返回类型和参数类型。例如:

#include<iostream>
using namespace std;
class Shape {
public:
  double area()
   cout << "Parent class area:" <<endl;
   return 0;
 
};
class Rectangle: public Shape{
public:
  double area() {
   cout << "Rectangle class area:" <<endl;
   return length * width;
  }
  void setLength(double len)
   length = len;
 
  void setWidth(double wid)
   width = wid;
 
private:
  double length;
  double width;
};
int main() {
  Rectangle Rect;
  Rect.setLength(5);
  Rect.setWidth(7);
  cout << "Total area: " << Rect.area() << endl;
  return 0;
}

当调用Rect.area()函数时,由于该函数在Rectangle类中重写了Shape类中的同名函数,则运行时会调用派生类Rectangle中的area()函数,输出“Rectangle class area:”。

总之,函数重载和重写虽然名字相似,但是它们有着不同的面向对象特性和使用场景。函数重载是实现多态性的一个方法,可以在同一作用域内定义多个同名函数,不同的参数列表绑定到不同的函数中。函数重写则是在基类和派生类之间实现多态性的一种方式,类之间有继承关系,继承自基类的派生类重新实现基类的函数。只有掌握了两者的区别,才能更好的理解和使用它们。

  
  

评论区