为什么我不能使用带有2个参数的重载运算符作为类的成员:
myclass& operator+(const otherclass& cl, int value);
答案 0 :(得分:11)
类函数具有隐式this
参数,因此在类中声明的双参数运算符将隐式地希望获取比实际可能更多的参数:a + b
其中a
是类C
的实例是a.operator+(b)
的糖,而不是C::operator+(a, b)
。如果您只想保持运算符的声明与类主体一致,则可以将它们声明为friend
函数:
class C {
public:
friend C& operator+(const C& a, const C& b);
};
答案 1 :(得分:2)
给定像a @ b
这样的表达式(其中@
是一些二元运算符),并且使用的重载是成员函数,它被视为:a.operator@(b)
。
换句话说,二元运算符的左侧操作数始终是调用其成员函数的对象。它拥有的唯一其他操作数是右手操作数,因此这是唯一可以作为(普通)参数传递的操作数。
C ++只有一个三元运算符(?:
)并且你不能重载它,因此不存在你可以将运算符作为成员函数重载并让它(有意义地)接收多个参数的情况