区分C ++中的函数重载和函数重写?
答案 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函数还处于不同范围内;而重载函数在相同范围内。