关于运算符重载的问题
下面是我在essential c++上看到的一些东西,以及产生的问题:
class Triangular_iterator
{
public:
Triangular_iterator( int index ) : _index( index-1 ){}
bool operator==( const Triangular_iterator& ) const;
bool operator!=( const Triangular_iterator& ) const;
int operator*() const;
int& operator++(); // prefix version
int operator++( int ); // postfix version
private:
void check_integrity() const;
int _index;
};
inline bool Triangular_iterator::
operator==( const Triangular_iterator &rhs ) const
{ return _index == rhs._index; }
An operator is applied directly to the class object(s):
if ( trian1 == trian2 ) ... (trian1和trian2都是Triangular_iterator类的)
//这里我想知道,==运算符重载时的参数对应的是前面的trian1还是后面的trian2,我对重载以后的运算符的运作不是很清楚
An operator can be defined either as a member operator function,
inline int Triangular_iterator::
operator*() const
{
check_integrity();
return Triangular::_elems[ _index ];
}
or as a nonmember operator function,
inline int
operator*( const Triangular_iterator &rhs )
{
rhs.check_integrity();
// note: the non-member instance has no
// access privilege to nonpublic members
return Triangular::_elems[ rhs._index ];
} //这里,我觉得private型的成员应该不能直接调用的,应该由public型的成员函数去调用,但是这里两种operator overload definition都直接调用了private型的member,难道是我理解错了?(就算是通过对象,rhs.check_integrity()对private型的调用也是不被允许的吧)
另外,看这里对重载参数的选择,我觉得运算符运用的时候参数对应的应该是前面的对象,而运算符后面的对象是定义重载的对象(假如有this指针的话,就是this指针指向的对象,但是我不知道有没有this指针的参与)
现在我就有一个疑问:
假如运算符重载不是成员函数,那还是比较好理解的,uanry的就一个参数,binary的就两个,然后按照格式写出定义
但是如果是成员函数了,那是不是这个运算符重载只能对应这个类?
然后双目的运算符只定义了一个参数,那这个参数对应的是运算符前面的对象还是后面的?另外一个对象是不是用this指针指定,也就指向是调用这个重载的对象?
双目运算符和单目运算符的this指针指向有什么区别?我看*和++的重载感觉this指针指向的应该是运算符后面的对象。那双目呢,也是这样吗?
[解决办法]
//这里我想知道,==运算符重载时的参数对应的是前面的trian1还是后面的trian2,我对重载以后的运算符的运作不是很清楚
==运算符重载时的参数对应的是后面的trian2。
前面的类型trian1是重载的 == 所在的类型。
[解决办法]
//这里我想知道,==运算符重载时的参数对应的是前面的trian1还是后面的trian2
对于定义成类成员函数的==操作符
调用是这样的
a == b ===> a.operator==(b); 所以this为左边的对象