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 );
- 不允許在過載定義操作符時使得所有操作數都是基本類型的,這也就是說,過載定義操作符時至少有一個操作數是自定義類型的;
- 欲使第一操作數爲基本類型者,不能定義爲成員函數。