21xrx.com
2024-12-23 00:39:58 Monday
登录
文章检索 我的文章 写文章
C++中重载和重写的区别
2023-06-27 04:27:12 深夜i     --     --
C++ 重载 重写 区别

在C++编程中,有两种常见的方法可以使用相同的函数名来实现不同的行为,它们分别是函数重载和函数重写。尽管它们看起来很相似,但在实现中它们有着明显的区别。

函数重载是指具有相同名称但参数不同的多个函数。在函数重载中,根据参数列表中提供的实参来选择要调用的函数。例如,在一个程序中可能有以下两个函数:


float getAverage(int a, int b);

float getAverage(int a, int b, int c);

这两个函数都有相同的名称getAverage,但一个需要两个整数参数,另一个需要三个整数参数。编译器将根据函数调用时提供的参数数量来选择要调用的函数。因此,当调用getAverage(3,4)时,编译器将选择第一个函数,而调用getAverage(3,4,5)时,编译器将选择第二个函数。

函数重写是指在类继承中,子类重新定义父类的虚函数。在这种情况下,子类将用新的实现来覆盖父类原有的实现。例如,在下面的代码中:


class Shape {

  public:

   virtual void draw()

     cout << "Drawing Shape" << endl;

   

};

class Rectangle: public Shape {

  public:

   void draw()

     cout << "Drawing Rectangle" << endl;

   

};

int main(void) {

  Shape *shape;

  Rectangle rec;

  shape = &rec;

  shape->draw();

  return 0;

}

在这个程序中,我们定义了一个父类Shape和一个继承自Shape的子类Rectangle。在父类Shape中,我们声明了一个虚函数draw()。然后我们在子类Rectangle中重新定义了这个函数,并用"Drawing Rectangle"来代替原来的"Drawing Shape"。在主函数中,我们创建了一个Shape指针shape,并将它指向Rectangle的一个实例对象。因此,当我们调用shape->draw()时,实际上会调用Rectangle子类中覆盖了父类函数的实现。这就是函数重写。

总之,虽然函数重载和函数重写都涉及到使用相同名称的函数来实现不同的行为,但它们是不同的概念。函数重载是指定义具有相同函数名称但不同参数的多个函数,而函数重写是指在类继承中重新定义父类的虚函数。理解这些差异对于正确使用它们来解决编程问题至关重要。

  
  

评论区

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