OOP筆記:操作符過載

3種實現方式:成員函數友員函數普通函數
class Employee
{
  protected:
    // …
  public:
    // …
    Employee & operator ++()
      { Age ++; return *this; }

    friend Employee & operator --( Employee & e)
      { e.Age --; return e; }

    // …
};
bool operator== (Employee, Employee);

2種調用方式:在表達式中引用操作符函數調用
class complex {
    double re, im;
  public:
    complex(double r, double i)
    { re=r; im=i; }
    complex operator+ (complex c);
    complex operator* (complex c);
};
bool operator== (complex, complex);

void f()
{
  complex a = complex(1, 3.1);
  complex b(1.2, 2);
  complex c = b;
  a = b + c;
  a = b.operator+(c);
  bool e = a == b;
  e = operator==(a, b);
}

For any prefix unary operator @, @aa can be interpreted as either aa.operator@( ) or operator@(aa). For any postfix unary operator @, aa@ can be interpreted as either aa.operator@(int) or operator@(aa, int)(這裏的int 是後綴一元操作符的標誌參數)。

C++的一些限制:
  • 過載定義操作符=、[ ]、( )、->的必須是非靜態成員函數,以保證其第一操作數一定是左值(lvalue );
  • 不允許在過載定義操作符時使得所有操作數都是基本類型的,這也就是說,過載定義操作符時至少有一個操作數是自定義類型的;
  • 欲使第一操作數爲基本類型者,不能定義爲成員函數。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章