2014-02-20 57 views
0

我是C++的新手,并试图理解重载的概念。重载运算符

+3

你可以给一个“重新定义一个操作符”的例子或者你看过它的地方吗?这不是一个常用术语。 –

+0

由于“一个定义规则”(One Definition Rule)的规定,一切最多只能定义一次,因此通常不能重新定义C++中的任何内容。 –

回答

2

“操作符重载”是为其中一个C++操作符提供自定义实现的常用术语。

它被称为“超载”,因为,在某些情况下,你在概念上重载一个新的重载需要您的自定义类型的对象作为参数的函数[email protected](其中@是一些运算符)。当你开始定义运营商为你的类型的成员

/** 
* Doesn't actually exist in this form, but conceptually 
* this exists built in to the language. 
*/ 
int operator+(int, int); 

/** 
* Your overload of the `operator+` function, which takes 
* `MyClass`s. 
*/ 
MyClass operator+(const MyClass&, const MyClass&); 

术语变得不准确,因为MyClass::operator+不超载::operator+;最好它会隐藏它(例如ADL),在最坏的情况下它只是在名称查找期间更好的匹配。但是,“运营商超载”仍然存在。相反,如果您试图彻底重新定义现有的运算符重载,那么您的编译器和/或链接器将阻止构建成功,因此“重新定义运算符”对于任何有效的工作都不是公认的术语。

+0

只是添加到这个答案,没有重新定义一个操作符这样的事情。运营商在那里,我们被允许超载大部分。 –