关于类中操作符重载的问题
今天看在看C++ primer plus时候,对于书上写的关于操作符重载的问题有些疑惑。
书上定义了一个描述矢量类,其代码为(我把需要的列出):
class Vector
{
private:
double x;
double y;
.
.
public:
Vector operator-()const;
.
.
}
对于这个操作符(-)进行 重载,其重载函数为:
Vector Vector::operator-()const;
{ return Vector(-x,-y); }
由定义可以知道,这次重载是为了使(-)负号,能应用于类。
那么如果在main函数中用到这个重载时情况应该如下:
假设a为Vector类,a.x=1,a.y=1
Vector demo;
demo=-a;
我的问题来了,这本书上有这么一句话:“在操作符表示法中,操作符左侧的对象是调用对象,操作符右侧的对象作为参数传递的对象。”但是在这里是矛盾的,因为在demo=-a这一句中,虽然a在右侧,但是很明显a是调用对象,并且重载函数定义中传递的参数为空。所以a在这里肯定是调用对象,但是它确在-的右边,这是为什么? c++ 类
[解决办法]
这个是单目运算符,你说的是双目运算符。单目运算符一般是前置的,比较特殊的是++、--这两个,有前置和后置的区别。
class T{
T operator++();//前置
T operator++(int);//后置,int为辅助标记,用来区分前置和后置,不要和双目混淆,不用传递参数
};
[解决办法]
这句 demo=-a;相当于这句 demo= a.operator-();
如果你这么看的话,- 在中间,往左边是 a,调用操作符的对象,往右边是 (),是操作符的参数列表,这里无参数。
[解决办法]
lz理解错了,调用对象是demo,a是调用参数,至于a是否有参数设置得看上下文
[解决办法]
单目操作符定义格式:
<返回值类型> <类名>::operator #()
{
}
c.单目操作符使用格式:
<类名> a;
#a;
或
a.operator();
[解决办法]
不是说了么,单目的情况下,的确是反过来的,所有的单目函数都是前缀的形式(++,--的例外看1楼)。但是却是由后者进行调用的,后者就是调用对象,而操作符前面为空,没有传递参数。
而demo=-a;这里是2个操作,第一个是单目运算符-:a.operator-() ,然后是双目运算符=:demo.operator=(a);