C ++中的函数重载与函数覆盖

函数重载通过改变签名来提供函数的多种定义,即改变参数的数量,改变参数的数据类型,返回类型不起作用。它可以在基类和派生类中完成。
例子:

void area(int a); void area(int a, int b); 

示例代码:

// CPP program to illustrate // Function Overloading #include <iostream> using namespace std;  // overloaded functions void test(int); void test(float); void test(int, float);  int main() {     int a = 5;     float b = 5.5;      // Overloaded functions     // with different type and     // number of parameters     test(a);     test(b);     test(a, b);      return 0; }  // Method 1 void test(int var) {     cout << "Integer number: " << var << endl; }  // Method 2 void test(float var) {     cout << "Float number: "<< var << endl; }  // Method 3 void test(int var1, float var2) {     cout << "Integer number: " << var1;     cout << " and float number:" << var2; } 

运行结果:

Integer number: 5 Float number: 5.5 Integer number: 5 and float number: 5.5 

函数重写(在运行时实现)
函数重写是基类函数在其派生类中的重新定义,具有相同的签名,即返回类型和参数。它只能在派生类中完成。
例子:

Class a { public:        virtual void display(){ cout << "hello"; } };  Class b:public a { public:         void display(){ cout << "bye";} }; 

示例代码:

// CPP program to illustrate // Function Overriding #include<iostream> using namespace std;  class BaseClass { public:     virtual void Display()     {         cout << "/nThis is Display() method"/n                " of BaseClass";     }     void Show()     {         cout << "/nThis is Show() method "/n            "of BaseClass";     } };  class DerivedClass : public BaseClass { public:     // Overriding method - new working of     // base class's display method     void Display()     {         cout << "/nThis is Display() method"/n            " of DerivedClass";     } };  // Driver code int main() {     DerivedClass dr;     BaseClass &bs = dr;     bs.Display();     dr.Show(); } 

运行结果:

This is Display() method of DerivedClass This is Show() method of BaseClass 

函数重载 VS 函数覆盖:

  • 继承:当一个类从另一个类继承时,就会发生函数的覆盖。 重载可以在没有继承的情况下发生。
  • 函数签名:重载函数的函数签名必须不同,即参数数量或参数类型应该不同。 在函覆盖中,函数签名必须相同。
  • 功能范围:被覆盖的功能在不同的范围内; 而重载的函数在同一范围内。
  • 函数的行为:当派生类函数必须做一些与基类函数不同的工作时,需要覆盖。 重载用于具有相同名称的函数,这些函数的行为取决于传递给它们的参数。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264013.html

(0)
上一篇 2022年6月6日
下一篇 2022年6月6日

相关推荐

发表回复

登录后才能评论