区分函数重载和函数重写

时间:2012-08-11 04:56:23

标签: c++ overloading override

区分C ++中的函数重载和函数重写?

11 个答案:

答案 0 :(得分:68)

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

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

(b)重载不会阻止超类的继承,而是覆盖超类的继承。

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

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

答案 1 :(得分:19)

当您想要具有不同参数的相同功能时,会完成功能重载

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
}

答案 2 :(得分:12)

当您更改方法签名中参数的原始类型时,您将进行重载。

当您更改方法的原始定义时,您将进行覆盖。

答案 3 :(得分:12)

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

示例:

#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

答案 4 :(得分:11)

1.Function Overloading是指类中存在多个具有相同名称的函数。 函数重写是函数在基类和派生类中具有相同的原型。

2.Function重载可以在没有继承的情况下发生。 函数重写发生在从另一个类继承一个类时。

3.过载的函数必须在参数数量上有所不同,或者参数类型应该不同。 在重写中,函数参数必须相同。

有关更多详细信息,请访问以下链接,其中提供有关函数重载和覆盖c ++的更多信息 https://googleweblight.com/i?u=https://www.geeksforgeeks.org/function-overloading-vs-function-overriding-in-cpp/&hl=en-IN

答案 5 :(得分:3)

函数重载是同名函数但参数不同。骑乘功能意味着同名功能,与参数相同

答案 6 :(得分:2)

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

答案 7 :(得分:2)

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

除了现有答案外,Overrided函数还处于不同范围内;而重载函数在相同范围内。