2009-12-07 53 views
5

这是为什么有时一个操作符重载被定义为类中的方法,就像为什么操作员有时是独立的,有时是类方法?

MyClass& MyClass::operatorFoo(MyClass& other) { .... return this; }; 

,有时它是一个单独的功能,如

MyClass& operatorFoo(MyClass& first, MyClass& bar) 

他们是否相同呢?当你以一种方式做,而另一方做时,什么规则支配着?

+0

我投票接近http://stackoverflow.com/questions/1145022 (显然我的搜索福不好)的 – 2009-12-07 20:46:00

+0

可能重复的副本[全局运算符和成员运算符之间的区别](http://stackoverflow.com/questions/1145022/difference-between-global-operator-and-member-operator) – 2010-09-14 15:29:30

回答

1

如果运算符定义在类的外部,则它被认为是全局的,并允许您在运算符的左侧显示其他类型。

例如,给定的一类Foo,与全球运营商+你可以这样做:如果你希望能够像做3 + obj你必须定义一个免费的(非会员)

Foo f; 
Foo f2 = 55 + f; 
5

如果你有一个二元运算符,例如+,通常要进行对两个参数进行类型转换。例如,一个字符串连接操作符需要能够将它的一个或两个操作数从一个char *转换为一个字符串。如果是这种情况,那么它不能是成员函数,因为左边的操作数是* this,并且不会执行转换。

如:

operator+(a, b); // conversions performed on a and b 
a->operator+(b); // conversion can only be performed on b 
相关问题