C++ 如何使操作符从对象的左侧开始工作?

C++ 如何使操作符从对象的左侧开始工作?,c++,C++,这感觉像是一个太基本的问题,所以如果它已经存在,我会接受这个链接作为答案,或者删除这个帖子,如果你们觉得合适的话,我个人在任何地方都找不到它,至少这样可能对其他人有用 是的,就像标题中说的,我如何制作操作符,让我从对象的左侧开始工作?f、 e: ++obj variable * obj 等 如果我想在“obj”的右边工作,我会做这样的事情 obj operator*(const variable &t){...} //for obj * variable operation 直觉上我

这感觉像是一个太基本的问题,所以如果它已经存在,我会接受这个链接作为答案,或者删除这个帖子,如果你们觉得合适的话,我个人在任何地方都找不到它,至少这样可能对其他人有用

是的,就像标题中说的,我如何制作操作符,让我从对象的左侧开始工作?f、 e:

++obj
variable * obj

如果我想在“obj”的右边工作,我会做这样的事情

obj operator*(const variable &t){...} //for obj * variable operation
直觉上我试过了

obj *operator(const variable &t){...} //for variable * obj operation(?)

要使它以另一种方式工作,但当然,这不起作用,有什么建议吗?

您可以重载函数并使该函数成为类的朋友

variable operator*(const variable &, const variable *);

class variable {
    friend variable operator*(const variable &, const variable *);
};

您可以重载函数并使该函数成为类的朋友

variable operator*(const variable &, const variable *);

class variable {
    friend variable operator*(const variable &, const variable *);
};

嗯,你不能那样做。我是说,选择接线员在哪一边工作。它由标准定义。C++中的操作符没有它们的边操作。所有人都是不同的操作员。重载的运算符由签名定义

无论如何,“side”只对一元运算符有意义。对于二进制运算符,它可以是在左操作数上调用的成员函数(右操作数作为参数传递),也可以是独立函数

“允许定义边”的情况是
++
--
。这是一个特例<就语言而言,code>++c和
c++
实际上是两个不同的操作符——递增前和递增后。通过重载中的“伪”参数实现了两者之间的区别:

还有其他一元运算符,您不能选择边,例如:
~
,没有为“右侧”案例定义合适的重载

其他消歧也通过参数完成<代码>*
用于成员访问和算术运算。重载的运算符由多个参数定义

T::运算符*(常数T2&b)常数
是一种艺术形式,而
R&T::operator*()是成员访问权限

您可以在此处找到所有运算符的规则:


既然它是C++,你就可以滥用它。但不值得推荐。

嗯,你不能那样做。我是说,选择接线员在哪一边工作。它由标准定义。C++中的操作符没有它们的边操作。所有人都是不同的操作员。重载的运算符由签名定义

无论如何,“side”只对一元运算符有意义。对于二进制运算符,它可以是在左操作数上调用的成员函数(右操作数作为参数传递),也可以是独立函数

“允许定义边”的情况是
++
--
。这是一个特例<就语言而言,code>++c
c++
实际上是两个不同的操作符——递增前和递增后。通过重载中的“伪”参数实现了两者之间的区别:

还有其他一元运算符,您不能选择边,例如:
~
,没有为“右侧”案例定义合适的重载

其他消歧也通过参数完成<代码>*
用于成员访问和算术运算。重载的运算符由多个参数定义

T::运算符*(常数T2&b)常数
是一种艺术形式,而
R&T::operator*()是成员访问权限

您可以在此处找到所有运算符的规则:


既然它是C++,你就可以滥用它。但不推荐。

将其设为自由函数,然后只需切换参数即可
obj操作符*(const variable&t,const obj&o)
。请澄清“在对象左侧工作”的含义,如果可能,请使用一些有效的代码。将其作为友元函数实现,如果您的类具有采用该类型的非显式构造函数,则它将工作。例如
5*myobj
如果
T操作符*(const T&l,const T&r)
是一个友元函数,并且有
T(int)
构造函数,那么
myobj将起作用。它几乎是Ramyabel和Neil所说内容的组合,你有你的答案:friend obj操作符*(右边的const variable&T,const obj&obj){…}和friend obj操作符*(左边的const obj&obj_,const variable&t){…}(左边/右边是相对于运算符的)。将其设为自由函数,然后只需切换参数。
obj运算符*(const variable&t,const obj&o)
。请澄清“在对象左边工作”的含义,如果可能的话,使用一些有效的代码。将其实现为友元函数,如果您的类具有采用该类型的非显式构造函数,则它将工作。例如,如果
T操作符*(const T&l,const T&r)
是友元函数且存在
T(int),则
5*myobj
将工作
constructor。几乎是Ramyabel和Neil所说内容的组合,你有你的答案:friend obj操作符*(const variable&t,const obj&obj_在右上){…}和friend obj操作符*(const obj&obj_在左上,const variable&t){…}(在左/右上是相对于操作符的)。