如何使操作员从对象的左侧工作
How to make operators work from the left of the object?
这感觉太基本了,还没有问过,所以如果它已经在那里,我会接受链接作为答案,或者如果你认为合适,我会删除这篇文章,就个人而言,我至少在任何地方都找不到它,所以也许这对其他人有用......
所以,是的,就像标题中所说的那样,我如何使运算符允许我从对象的左侧工作?
++obj
variable * obj
等
如果我想在那个"obj"的右侧工作,我会做一些类似的东西
obj operator*(const variable &t){...} //for obj * variable operation
直觉上我试过
obj *operator(const variable &t){...} //for variable * obj operation(?)
让它反过来工作,但当然,这不起作用,有什么建议吗?
那样做。我的意思是,选择操作员在哪一边工作。它由标准定义。c++ 中的运算符没有它们操作的边。所有这些都是不同的运算符。重载运算符由签名定义。
无论如何,"边"只对一元运算符有意义。对于二元运算符,它要么是在左操作数上调用的成员函数,右操作数作为参数传递,要么是一个独立的函数。
"允许定义侧面"的情况++
和--
.这是一个特例。 ++c
和c++
实际上是语言方面的两个不同的运算符 - 前递增和后递增。通过重载中的"虚假"参数实现的区别:http://en.cppreference.com/w/cpp/language/operator_incdec。
还有其他一元运算符,你不能选择边,例如:!
、~
,没有为"右侧"情况定义合适的重载。
其他消除歧义也是通过参数完成的。 *
用于成员访问和算术运算。重载的运算符由参数数定义。
T T::operator*(const T2 &b) const;
是人工的,R& T::operator*();
是会员访问。
在这里,您可以找到所有运算符的规则:http://en.cppreference.com/w/cpp/language/operators。
Aaand,因为它的c ++你可以滥用它。不过不推荐。
你可以重载函数并使该函数成为类的朋友。
variable operator*(const variable &, const variable *);
class variable {
friend variable operator*(const variable &, const variable *);
};
- 对象指针在c++中是如何工作的
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 错误:三元运算符无法在对象中正常工作"cout"
- C++控制台应用,其中有两个冲突的对象不工作
- C++:返回本地对象,但不能正常工作
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 此类模板的对象创建如何工作?
- 返回对象如何与分配运算符一起工作
- 在删除另一个类中的一个类的对象时析构函数如何工作
- 构建对象数组是如何工作的?我被这个例子困住了
- C :删除对象(使用新的),但成员函数仍然可以正常工作(?)
- 当 std::unique_ptr 在手动删除其拥有的对象后超出范围时,它如何工作?
- 快速排序动态大量对象无法正常工作
- CPU寄存器中返回的用户定义类型的C 对象.实例方法如何工作
- 在dll中静态对象的破坏之前,要终止工作线程(但不是.exe)
- 朋友功能是否继承?为什么基类朋友功能在派生的类对象上工作
- std::共享内存中的互斥对象不工作
- 函数对象无法正常工作
- 有可能实现一个与数组而不是单个对象一起工作的内存池吗
- asio::io_service.run() 尽管工作对象退出