为什么重载操作符是类的成员只能有一个参数

问题描述:

为什么不能我用一个重载操作者以2个参数作为这样的类的成员:为什么重载操作符是类的成员只能有一个参数

myclass& operator+(const otherclass& cl, int value); 
+5

`value`将来自`myclass_instance + otherclass_instance`哪里? – delnan 2011-01-26 18:11:37

+0

你想表达什么?你想写什么代码? – 2011-01-26 18:28:01

类函数具有一个隐含的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); 
}; 

鉴于像a @ b(其中@是一些二进制运算符)的表达,并且过载被使用的是成员函数,它的处理方式如下:[email protected](b)

换句话说,二元运算符的左侧操作数始终是其成员函数被调用的对象。它唯一的其他操作数是右手操作数,所以这是唯一可以作为(正常)参数传递的操作数。

C++只有一个三元运算符(?:),并且不能重载该运算符,因此不存在可以将运算符重载为成员函数并使其(有意)可以接收多个参数的情况。