C++ 为什么操作符有时是独立的,有时是类方法?
为什么有时操作符重写被定义为类中的一个方法,比如C++ 为什么操作符有时是独立的,有时是类方法?,c++,operator-overloading,C++,Operator Overloading,为什么有时操作符重写被定义为类中的一个方法,比如 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)
它们相等吗?当您以一种方式执行操作时,以及当您以另一种方式执行操作时,哪些规则将起支配作用?如果运算符是在类之外定义的,则它被视为全局运算符,并允许您在运算符的左侧显示其他类型 例如,给定一个类
Foo
,使用全局运算符+
,可以执行以下操作:
Foo f;
Foo f2 = 55 + f;
如果您希望能够执行类似于
3+obj
的操作,则必须定义一个自由(非成员)运算符
如果你想让你的操作符成为受保护的或者私有的,你必须让它们成为方法
某些运算符不能是自由函数,例如,运算符->
这里已经回答了这个问题:
如果您有一个二元运算符,如+,通常希望在两个操作数上执行类型转换。例如,字符串串联运算符需要能够将其一个或两个操作数从char*转换为字符串。如果是这种情况,则它不能是成员函数,因为左侧操作数将是*this,并且不会执行转换 例如:
我投票决定以可能的副本(显然我的搜索结果不好)结束
operator+( a, b ); // conversions performed on a and b
a->operator+( b ); // conversion can only be performed on b