21xrx.com
2024-12-22 22:24:58 Sunday
登录
文章检索 我的文章 写文章
C++中函数重载和重写的区别
2023-07-07 03:22:14 深夜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:”。

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复