运算符重载

一.一般形式
返回类型 operator 操作符 (参数列表)
 
二.成员函数or友元函数?
  • 大部分运算符重载函数既可以是成员函数,也可以使友元函数。使用友元函数的形式如下:
        friend 返回类型 operator 操作符 (参数列表)
        eg:
        成员函数:Int operator + (const Int &);
        友元函数:friend Int operator + (const Int &, const Int &);
         注意:跟成员函数不同的是参数列表。友元函数的参数列表中比成员函数多一个参数,因为成员函数可以通过this指针隐式的访问对象的参数,而友元必须指定。
  • 运算符重载函数定义为成员函数或是友元函数的几点依据:
    •  重载运算符(),【】,->或任意赋值运算符时,必须为成员函数
    • 当运算符重载函数是一个成员函数时,最左边的操作数必须是类的一个对象(或引用),例如上例中+左边为Int。如果左边的操作数必须是一个不同类的对象或内部类型的对象,运算符函数必须是友元函数。(解释:通过成员函数重载的运算符是由运算符左边的对象调用的,该对象通过this指针隐式传递,因此,最左边的操作数必须是一个对象。将运算符重载函数声明为友元函数时,因为没有隐含的this指针,所以必须显示指定所有参数。
    • 对二元运算符,成员函数带一个参数,友元函数带两个参数。对一元运算符,成员函数不带参数,友元函数带一个阐述。

三.可重载or不可重载的运算符

 

不可被重载的运算符:
.*,    ::,    ?:,    sizeof
 
四.其他
1.前置后置运算符如何区分?
前置:Integer& operator ++ ()            friend Integer& operator ++(Integer & a);
后置:Integer operator ++ (int)            friend Integer operator ++ (Integer & a, int);
int只是一个伪值,用于区分前置后置运算符
posted @ 2015-07-10 16:47  Rosanne  阅读(219)  评论(0编辑  收藏  举报