c++教科书上会说,一般而言,将算术和关系操作符定义成非成员函数。可要是定义成成员函数怎么写?
以operator+为例。定义成非成员函数情况是:
X operatoe+(const X& lref,const X& rref);
那么定义成成员函数是否是这样呢?
class X {
public:
.....
X operator+(const X& rref);
.....
};
其实不对。成员函数第一个参数的地址是this指针,是X *const this,这是一个指向非常量的指针。跟非成员函数版本并不一样。如果这样定义,函数的第一个参数在使用时,就不能是常量对象和临时对象了。为了跟非成员函数对应,应该定义成:
X operator+(const X& rref) const;
这样,第一个参数的常量性就得到保留,这个时候的this是 const X* const this。