这是为什么有时一个操作符重载被定义为类中的方法,就像为什么操作员有时是独立的,有时是类方法?
MyClass& MyClass::operatorFoo(MyClass& other) { .... return this; };
,有时它是一个单独的功能,如
MyClass& operatorFoo(MyClass& first, MyClass& bar)
他们是否相同呢?当你以一种方式做,而另一方做时,什么规则支配着?
这是为什么有时一个操作符重载被定义为类中的方法,就像为什么操作员有时是独立的,有时是类方法?
MyClass& MyClass::operatorFoo(MyClass& other) { .... return this; };
,有时它是一个单独的功能,如
MyClass& operatorFoo(MyClass& first, MyClass& bar)
他们是否相同呢?当你以一种方式做,而另一方做时,什么规则支配着?
运营商。
如果你想让你的操作员受到保护或私人,你必须让他们的方法。
某些运营商不能使用免费功能,例如operator->
。
这是已经在这里找到答案:
如果运算符定义在类的外部,则它被认为是全局的,并允许您在运算符的左侧显示其他类型。
例如,给定的一类Foo
,与全球运营商+
你可以这样做:如果你希望能够像做3 + obj
你必须定义一个免费的(非会员)
Foo f;
Foo f2 = 55 + f;
如果你有一个二元运算符,例如+,通常要进行对两个参数进行类型转换。例如,一个字符串连接操作符需要能够将它的一个或两个操作数从一个char *转换为一个字符串。如果是这种情况,那么它不能是成员函数,因为左边的操作数是* this,并且不会执行转换。
如:
operator+(a, b); // conversions performed on a and b
a->operator+(b); // conversion can only be performed on b
我投票接近http://stackoverflow.com/questions/1145022 (显然我的搜索福不好)的 – 2009-12-07 20:46:00
可能重复的副本[全局运算符和成员运算符之间的区别](http://stackoverflow.com/questions/1145022/difference-between-global-operator-and-member-operator) – 2010-09-14 15:29:30