首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于运算符重载的有关问题

2012-03-22 
关于运算符重载的问题下面是我在essentialc++上看到的一些东西,以及产生的问题:classTriangular_iterator{

关于运算符重载的问题
下面是我在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为左边的对象

热点排行