C ++中运算符重载和运算符覆盖之间的主要区别是什么?
答案 0 :(得分:10)
Some use后一术语用于描述您定义自己的全局operator new
或operator delete
时所执行的操作。那是因为您自己的定义可以替换库中的默认版本。 C ++标准使用单词替换和替换。使用“覆盖”有点令人困惑,因为该术语已用于由派生类中的函数覆盖的虚函数。
术语“重载”是用于定义自己的运算符函数的通用术语。即使操作员功能没有发生实际的重载,也会使用该术语。接近这个术语的一种方法是因为它“重载”了某些运算符的内置含义。
答案 1 :(得分:5)
我从未听过后一个词,但我认为它与第一个词相同。 运算符重载是您在运算符上下文中使用时为类提供函数的函数。例如,如果我有一个类point
,并想要添加它们,例如a + b
,我就必须创建一个operator+(point other)
函数来处理它。
答案 2 :(得分:4)
通常,重载用于识别给定函数名称的多个签名何时。每个这样定义的函数都是函数名的重载。另一方面, override 仅存在于多态(C ++中的virtual
)成员函数中,其中在派生方法中重新定义相同签名覆盖基类中提供的行为。
struct base {
virtual void foo();
void foo(int); // overloads void foo()
};
struct derived : base {
void foo(); // overrides void base::foo()
void foo(int); // overloads void derived::foo()
// unrelated to void::base(int)
};
int main() {
derived d;
base & b = d;
b.foo( 5 ); // calls void base::foo(int)
b.foo(); // calls the final overrider for void base::foo()
// in this particular case void derived::foo()
d.foo( 5 ); // calls void derived::foo(int)
}
答案 3 :(得分:2)
好的功课问题。我会在这里帮助你...重载意味着2个方法具有相同的名称和不同的签名+返回类型。覆盖意味着具有SAME名称的2个方法,其中子方法具有不同的功能。这个练习就是你的例子。
答案 4 :(得分:2)
如果问题是关于函数重载和函数重写那么...... @ woot4moo解释了那件事。 就我的知识而言,我从未听说过“操作员压倒”。 运算符重载是为了为类的对象提供与该运算符相关的特殊功能,只要该运算符与该对象一起使用。 例如,一个类应该提供一个运算符(=)来始终防止浅层处理。(这与复制构造函数一起完成)。
答案 5 :(得分:0)
我猜“运算符覆盖”适用于在类中声明运算符并使其成为虚拟运算符。这是一件非常脆弱的事情 - 你通常会做更好的事情。
答案 6 :(得分:0)
重载和覆盖之间的主要区别是 在重载时我们可以使用相同的函数名 不同任务的多次不同参数 在课堂上。 和覆盖意味着我们可以使用相同的名称功能名称 在派生类中使用相同的基类参数。 这也被称为程序中代码的可用性。
答案 7 :(得分:0)
如果派生类定义的功能与基类相同,则称为重写。 当函数名称相同但使用不同的参数来定义函数时,将导致重载。