区分函数重载和函数覆盖
Posted
技术标签:
【中文标题】区分函数重载和函数覆盖【英文标题】:Differentiate between function overloading and function overriding 【发布时间】:2012-08-08 08:48:40 【问题描述】:C++中函数重载和函数覆盖的区别?
【问题讨论】:
奇怪,我找不到这个问题的副本! 这是一个问题吗?还是命令? 对我来说听起来像是一个面试问题。 【参考方案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】:除了现有的答案,覆盖的函数在不同的范围内;而重载的函数在同一范围内。
【讨论】:
以上是关于区分函数重载和函数覆盖的主要内容,如果未能解决你的问题,请参考以下文章