【问题标题】:Differentiate between function overloading and function overriding区分函数重载和函数覆盖
【发布时间】:2012-08-08 08:48:40
【问题描述】:

C++中函数重载和函数覆盖的区别?

【问题讨论】:

  • 奇怪,我找不到这个问题的副本!
  • 这是一个问题吗?还是命令?
  • 对我来说听起来像是一个面试问题。

标签: c++ overloading overriding


【解决方案1】:

在 C++ 中重载方法(或函数)是定义同名函数的能力,只要这些方法具有不同的签名(不同的参数集)。方法重写是继承类重写基类的虚方法的能力。

a) 在重载中,同一类中可用的方法之间存在关系,而在覆盖中,超类方法和子类方法之间存在关系。

(b) 重载不会阻止从超类继承,而重写会阻止从超类继承。

(c) 在重载中,不同的方法共享相同的名称,而在重写中,子类方法替换超类。

(d) 重载必须有不同的方法签名,而重写必须有相同的签名。

【讨论】:

  • 啊,接受的答案不是最佳答案的现象...... ;)
  • 最好的答案,有很好的解释。谢谢!
【解决方案2】:

当你想要相同的具有不同参数的函数时,会完成函数重载

void Print(string s);//Print string
void Print(int i);//Print integer

函数重写是为了给基类中的函数赋予不同的含义

class Stream//A stream of bytes
{
public virtual void Read();//read bytes
}

class FileStream:Stream//derived class
{
public override void Read();//read bytes from a file
}
class NetworkStream:Stream//derived class
{
public override void Read();//read bytes from a network
}

【讨论】:

  • 有例子让这个答案更容易理解
【解决方案3】:

当您更改方法签名中参数的原始类型时,您正在实施重载。

当您更改派生类中方法的原始实现时,您正在实施覆盖。

【讨论】:

  • “更改方法的原始定义”不够精确。
【解决方案4】:

覆盖意味着,对具有相同参数的现有函数给出不同的定义, 而重载意味着为现有函数添加不同的定义,并带有不同的参数。

例子:

#include <iostream>

class base{
    public:
    //this needs to be virtual to be overridden in derived class
    virtual void show(){std::cout<<"I am base";}
    //this is overloaded function of the previous one
    void show(int x){std::cout<<"\nI am overloaded";} 
};

class derived:public base{
    public:
    //the base version of this function is being overridden
    void show(){std::cout<<"I am derived (overridden)";}
};


int main(){
    base* b;
    derived d;
    b=&d;
    b->show();  //this will call the derived overriden version
    b->show(6); // this will call the base overloaded function
}

输出:

I am derived (overridden)
I am overloaded

【讨论】:

    【解决方案5】:

    1.函数重载是指一个类中存在多个同名函数。 函数覆盖是指函数在基类和派生类中具有相同的原型。

    2.函数重载可以在没有继承的情况下发生。 当一个类继承自另一个类时,就会发生函数覆盖。

    3.重载的函数要么参数数量不同,要么参数类型不同。 重写的函数参数必须相同。

    有关更多详细信息,您可以访问下面的链接,在该链接中您可以获得有关 C++ 中函数重载和覆盖的更多信息 https://googleweblight.com/i?u=https://www.geeksforgeeks.org/function-overloading-vs-function-overriding-in-cpp/&hl=en-IN

    【讨论】:

      【解决方案6】:

      函数重载是同名函数但参数不同。函数重载意味着同名函数,同参数

      【讨论】:

        【解决方案7】:

        Function overloading - 具有相同名称但参数数量不同的函数

        Function overriding - 继承的概念。具有相同名称和相同数量参数的函数。这里说第二个函数覆盖了第一个函数

        【讨论】:

          【解决方案8】:

          重载具有不同参数的同名函数,而重载具有相同名称和相同参数的函数时,将基类替换为派生类(继承类)

          【讨论】:

            【解决方案9】:

            函数重载可能有不同的返回类型,而函数覆盖必须有相同或匹配的返回类型。

            【讨论】:

              【解决方案10】:

              重载意味着具有相同名称但不同签名的方法 重写意味着重写基类的虚方法......

              【讨论】:

                【解决方案11】:

                除了现有的答案,覆盖的函数在不同的范围内;而重载的函数在同一范围内。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-04-03
                  • 1970-01-01
                  • 2011-03-01
                  • 2010-10-09
                  • 2016-06-01
                  相关资源
                  最近更新 更多